Практически JavaПримери за скриптове с изходен код Code

⚡ Умно обобщение

Практически Code Примери с използване JavaСкриптовете демонстрират как циклите, валидирането на формуляри и събитията решават ежедневните задачи на браузъра. Тази статия представя генератор на таблица за умножение, пълен валидатор на регистрационни формуляри, изскачащ прозорец, задействан при задържане на курсора на мишката, дигитален часовник на живо и практики, които поддържат надеждността на тези скриптове.

  • Вложени цикли: Таблицата за умножение изгражда HTML низ с външен цикъл на редове и вътрешен цикъл на колони.
  • 📝 Валидиране на формуляра: Паралелните масиви свързват всеки вход със собствен контейнер за грешки, така че съобщенията се появяват до полето, което е неуспешно.
  • 📧 Правило за имейл: Проверките на позицията на знака „at“ и последната точка отхвърлят неправилно оформените адреси преди изпращане.
  • 🖱️ Обработка на събития: addEventListener прикачва поведение към елемент, без да поставя скрипт вътре в маркировката.
  • Актуализации с определено време: setInterval повтаря функция по фиксиран график, което управлява примера с часовника в реално време.
  • 🔐 Правило на сървъра: Проверките от страна на клиента подобряват само потребителското изживяване и всяка стойност трябва да бъде валидирана отново на сървъра.
  • 🧹 Съвременна практика: Заменете document.write и имплицитните глобални променливи с textContent, let и const в новия код.

JavaПримери за скриптове с изходен код Code

Какво ще изградите в тези JavaПримери за скриптове

Всеки пример по-долу е цялостна HTML страница, която се изпълнява във всеки браузър без стъпка за изграждане или външна библиотека. Заедно те обхващат трите умения, които се появяват в почти всеки скрипт на браузър: генериране на маркиране от данни, валидиране на потребителски вход и реагиране на събития.

Пример Концепция, практикувана Използвани ключови методи
Таблица за умножение Вложени цикли и изграждане на низове подкана, за, докато, document.write
Проверка на формуляра Масиви, условия и актуализации на DOM getElementById, indexOf, lastIndexOf, innerHTML
Изскачащо съобщение Обработка на събития addEventListener, предупреждение
Digiчасовник Таймери и форматиране на дата setInterval, Date, padStart, textContent

Основни познания за JavaСценарий синтаксисът се приема. Ако циклите все още са непознати, прочетете как да използваме цикли в JavaСценарий преди да започне.

Пример №1: JavaТаблица за умножение на скрипт

Създайте проста таблица за умножение, която пита потребителя за броя на редовете и колоните.

Решение:

<html>
<head>
  <title>Multiplication Table</title>
  <script type="text/javascript">
    var rows = prompt("How many rows for your multiplication table?");
    var cols = prompt("How many columns for your multiplication table?");
    if(rows == "" || rows == null)
   		 rows = 10;
    if(cols== "" || cols== null)
   		 cols = 10;
    createTable(rows, cols);
    function createTable(rows, cols)
    {
      var j=1;
      var output = "<table border='1' width='500' cellspacing='0' cellpadding='5'>";
      for(i=1;i<=rows;i++)
      {
    	output = output + "<tr>";
        while(j<=cols)
        {
  		  output = output + "<td>" + i*j + "</td>";
   		  j = j+1;
   		}
   		 output = output + "</tr>";
   		 j = 1;
    }
    output = output + "</table>";
    document.write(output);
    }
  </script>
</head>
<body>
</body>
</html>

Изход (3 реда и 4 колони):

1   2   3   4
2   4   6   8
3   6   9  12

Code обяснение: Външният цикъл for създава по един ред от таблицата на итерация, докато вътрешният цикъл while запълва този ред с по една клетка на колона. Броячът j се нулира на 1 след всеки ред, което е стъпката, която повечето начинаещи забравят. Без това нулиране, само първият ред щеше да съдържа клетки.

💡 Съвет: Функцията prompt винаги връща низ. Изразът i*j работи, защото JavaСкриптът преобразува и двата операнда в числа за умножение, но сравнение, като например rows > 5 би сравнил текст. Обгърнете входа в Number() когато стойността се използва както за аритметични изчисления, така и за сравнение.

Пример №2: Пример за JS формуляри

Създайте примерна програма за формуляри, която събира собствено име, фамилия, имейл адрес, потребителско име, парола и потвърждение на паролата от потребителя. Всички полета за въвеждане са задължителни и въведеният имейл адрес трябва да бъде в правилния формат. Също така, стойностите, въведени в текстовите полета за парола и потвърждение на паролата, трябва да са еднакви. След валидиране с помощта на JavaСценарий, показвайте съответните съобщения за грешки в червено точно до текстовото поле, където има грешка.

Решение с източник Code:

<html>
<head>
  <title>Form Validation</title>
  <script type="text/javascript">
    var divs = new Array();
    divs[0] = "errFirst";
    divs[1] = "errLast";
    divs[2] = "errEmail";
    divs[3] = "errUid";
    divs[4] = "errPassword";
    divs[5] = "errConfirm";
    function validate()
	{
      var inputs = new Array();
      inputs[0] = document.getElementById('first').value;
      inputs[1] = document.getElementById('last').value;
      inputs[2] = document.getElementById('email').value;
      inputs[3] = document.getElementById('uid').value;
      inputs[4] = document.getElementById('password').value;
      inputs[5] = document.getElementById('confirm').value;
      var errors = new Array();
      errors[0] = "<span style='color:red'>Please enter your first name!</span>";
      errors[1] = "<span style='color:red'>Please enter your last name!</span>";
      errors[2] = "<span style='color:red'>Please enter your email!</span>";
      errors[3] = "<span style='color:red'>Please enter your user id!</span>";
      errors[4] = "<span style='color:red'>Please enter your password!</span>";
      errors[5] = "<span style='color:red'>Please confirm your password!</span>";
      for (i in inputs)
      {
        var errMessage = errors[i];
        var div = divs[i];
        if (inputs[i] == "")
        	document.getElementById(div).innerHTML = errMessage;
        else if (i==2)
        {
          var atpos=inputs[i].indexOf("@");
          var dotpos=inputs[i].lastIndexOf(".");
          if (atpos<1 || dotpos<atpos+2 || dotpos+2>=inputs[i].length)
        	document.getElementById('errEmail').innerHTML = "<span style='color: red'>Enter a valid email address!</span>";
          else
        	document.getElementById(div).innerHTML = "OK!";
        }
        else if (i==5)
        {
          var first = document.getElementById('password').value;
          var second = document.getElementById('confirm').value;
          if (second != first)
        	document.getElementById('errConfirm').innerHTML = "<span style='color: red'>Your passwords don't match!</span>";
          else
       		document.getElementById(div).innerHTML = "OK!";
        }
        else
        	document.getElementById(div).innerHTML = "OK!";
       }
     }
        function finalValidate()
        {
          var count = 0;
          for(i=0;i<6;i++)
          {
            var div = divs[i];
            if(document.getElementById(div).innerHTML == "OK!")
            count = count + 1;
          }
          if(count == 6)
          	document.getElementById("errFinal").innerHTML = "All the data you entered is correct!!!";
        }
   </script>
</head>
<body>
	<table id="table1">
      <tr>
        <td>First Name:</td>
        <td><input type="text" id="first" onkeyup="validate();" /></td>
        <td><div id="errFirst"></div></td>
      </tr>
      <tr>
        <td>Last Name:</td>
        <td><input type="text" id="last" onkeyup="validate();"/></td>
        <td><div id="errLast"></div></td>
      </tr>
      <tr>
        <td>Email:</td>
        <td><input type="text" id="email" onkeyup="validate();"/></td>
        <td><div id="errEmail"></div></td>
      </tr>
      <tr>
        <td>User Id:</td>
        <td><input type="text" id="uid" onkeyup="validate();"/></td>
        <td><div id="errUid"></div></td>
      </tr>
      <tr>
        <td>Password:</td>
        <td><input type="password" id="password" onkeyup="validate();"/></td>
        <td><div id="errPassword"></div></td>
      </tr>
      <tr>
        <td>Confirm Password:</td>
        <td><input type="password" id="confirm" onkeyup="validate();"/></td>
        <td><div id="errConfirm"></div></td>
      </tr>
      <tr>
        <td><input type="button" id="create" value="Create" onclick="validate();finalValidate();"/></td>
        <td><div id="errFinal"></div></td>
      </tr>
	</table>
</body>
</html>

Очаквано поведение:

Empty first name        -> Please enter your first name!
Email "ann@site"        -> Enter a valid email address!
Email "ann@site.com"    -> OK!
Passwords differ        -> Your passwords don't match!
All six fields valid    -> All the data you entered is correct!!!

Code обяснение: Три масива работят паралелно. входове запазва текущите стойности, грешки съдържа съответстващите съобщения и divs съдържа идентификатора на контейнера, който показва всяко съобщение. Следователно индексът свързва поле, текста на грешката му и местоположението му на изхода. Клонът за имейл приема адрес само когато знакът at не е първият символ и когато поне два символа разделят знака at от последната точка.

⚠️ Предупреждение: Валидирането от страна на клиента подобрява потребителското изживяване, но не осигурява сигурност. Всеки може да го деактивира. JavaСкриптирайте или публикувайте директно до крайната точка, така че всяко показано тук правило трябва да се повтори на сървъра.

Пример №3: Изскачащо съобщение, използващо събитие

Покажете просто съобщение „Добре дошли!!!“ на вашата демонстрационна уеб страница и когато потребителят задържи курсора на мишката върху съобщението, трябва да се покаже изскачащ прозорец със съобщението „Добре дошли на моята уеб страница!!!“.

Решение:

<html>
    <head>
        <title>Event!!!</title>
        <script type="text/javascript">
            function trigger() {
                document.getElementById("hover").addEventListener("mouseover", popup);
                function popup() {
                    alert("Welcome to my WebPage!!!");
                }
            }
        </script>
        <style>
            p{
                font-size: 50px;
                position: fixed;
                left: 550px;
                top: 300px;
            }
        </style>
    </head>
    <body onload="trigger();">
        <p id="hover">Welcome!!!</p>
    </body>
</html>

Очаквано поведение:

Page loads      -> the text "Welcome!!!" appears in large type
Mouse hovers    -> an alert box shows "Welcome to my WebPage!!!"

Code обяснение: Слушателят е прикачен вътре в тригерната функция, която се изпълнява при събитието onload в тялото. Изчакването на зареждане е важно, защото параграфът с идентификатор „hover“ не съществува, докато заглавието все още се анализира. Същият резултат се постига по-чисто чрез поставяне на скрипта точно преди затварящия таг на тялото или чрез добавяне на атрибута defer.

Пример №4: На живо Digiтал часовник, използващ setInterval

Показване на текущото време на страницата и обновяване веднъж на всяка секунда. Този пример въвежда таймери и показва съвременната алтернатива на document.write.

<html>
<head>
    <title>Digital Clock</title>
</head>
<body>
    <h2 id="clock">--:--:--</h2>

    <script>
        function showTime() {
            const now = new Date();
            const hh = String(now.getHours()).padStart(2, "0");
            const mm = String(now.getMinutes()).padStart(2, "0");
            const ss = String(now.getSeconds()).padStart(2, "0");

            // textContent is safer than innerHTML for plain text
            document.getElementById("clock").textContent = hh + ":" + mm + ":" + ss;
        }

        showTime();                 // draw immediately
        setInterval(showTime, 1000); // then refresh every second
    </script>
</body>
</html>

Очаквано поведение:

09:05:07
09:05:08
09:05:09   (the heading updates in place once per second)

Еднократното извикване на showTime преди setInterval избягва видимо едносекундно забавяне при отваряне на страницата. Използвайте clearInterval със стойността, върната от setInterval, когато часовникът трябва да спре.

Най-добри практики за писане на тези JavaПримери за скриптове

Трите оригинални примера датират от по-ранен стил JavaСценарий. Списъкът по-долу показва какво да се промени при адаптирането им за производствена работа.

  1. Заменете document.write: Изтрива целия документ, когато е извикан след зареждане на страницата. Създайте елемент и задайте textContent или добавете възел вместо това.
  2. Декларирайте всяка променлива: Използвайте let и const, вместо да разчитате на имплицитни глобални променливи като counter i в горните цикли.
  3. Предпочитайте textContent пред innerHTML: Вмъкването на предоставен от потребителя текст с innerHTML отваря дупка за междусайтови скриптове.
  4. Преместете манипулаторите извън маркировката: Заменете атрибутите onkeyup и onclick с addEventListener, което държи поведението отделно от структурата.
  5. Преобразуване на входния сигнал: Обвивайте стойностите в Number() преди да ги използвате при сравнения, тъй като prompt винаги връща низ.
  6. Валидирайте отново на сървъра: Третирайте проверките на браузъра само като удобен слой.

За да разгледаме по-подробно тези примери, прегледайте JavaМетоди за масиви от скриптове за паралелните масиви, използвани във валидатора на формуляри, JavaНизове на скрипта за проверките на позицията по имейл и бисквитки в JavaСценарий да запомни стойностите, въведени от посетителя. Решете къде принадлежи готовият скрипт, като го прочетете вътрешен и външен JavaСценарий.

Въпроси и Отговори

Запазете кода във файл с разширение .html и го отворете във всеки браузър. Не е необходим сървър, компилатор или библиотека за нито един от четирите примера на тази страница.

Цикълът while спира, след като j премине броя на колоните. Без нулиране на j на 1, всеки ред след първия няма да произвежда никакви клетки.

Не. Това само подобрява преживяването, като дава незабавна обратна връзка. Заявката може да заобиколи браузъра изцяло, така че сървърът трябва да приложи същите правила, преди да съхрани каквото и да било.

Mouseover се задейства отново, когато курсорът се премести върху дъщерен елемент, докато mouseenter се задейства само веднъж за самия елемент. Изберете mouseenter, когато повтарящите се задействания са нежелани.

Изкуственият интелект е полезен за първи чернови, но генерираният код често използва innerHTML с неекраниран вход. Прочетете всеки ред и заменете опасните DOM записи преди публикуване.

Да, когато поставите точната конзолна грешка заедно с кода. Грешките във времето, като например изпълнение на скрипт преди съществуването на елемента, са сред най-лесните за идентифициране от асистента.

Обобщете тази публикация с: