JavaScript-код останавливает работу браузера, а код работает только в Firefox - PullRequest
2 голосов
/ 10 июля 2011

У меня есть форма, для которой все текстовые поля должны быть заполнены перед отправкой.моя форма выглядит следующим образом:

<form name="form" method="post" action="url" onsubmit="return checkEmpty(this)" >
<div class="field">
<label>field1</label><input type="text" name="f1" />
</div>
<div class="field">
<label>field2</label><input type="text" name="f2" />
</div>
..
....
......
input type="submit" name="Submit" value="submit" />
</form>

. Что я делаю здесь, так это то, что при отправке формы я проверяю, является ли текстовое поле пустым, и, если он есть, я создаю dom элемент h3 и добавляюэто к div этого соответствующего поля, и если текстовое поле не пустое, я проверяю, есть ли какое-либо текстовое поле, присоединенное к этому соответствующему полю, и если я нахожу его, я удаляю его.вот мой код JavaScript

function checkEmpty(form) {
   var textboxes=form.elements;
   for(var i=0;i<textboxes.length;i++)
   {
      if((textboxes[i].type=="text" || textboxes[i].type=="password") && textboxes[i].textLength==0)   //text box is empty                     
      {
         var msg=document.createElement('h3');
         msg.innerHTML="u cant leave this field blank";
         textboxes[i].parentNode.appendChild(msg);
         return false;
      }
      else                      //text box is not empty
      {
         var rem_msg=textboxes[i].parentNode.getElementsByTagName('h3');
         for(var j=0;j<rem_msg.length;j++)
            textboxes[i].parentNode.removeChild(rem_msg[j]);
      }
   }
}

Теперь браузер зависает, когда я отправляю форму. * Кроме того, мой код не работает в ggogle chrome, а только в Firefox * ДоЯ не удалял элементы, код работал нормально, но удаление элемента необходимо, потому что, скажем, пользователь не вводит никакого значения в текстовое поле 1 с первой попытки, поэтому элемент h3 будет добавлен, но теперь он вводит некоторый текст в первое текстовое поле, нооставляет второе текстовое поле пустым, поэтому элемент h3 первого текстового поля должен исчезнуть.


из-за ответа ниже код больше не зависает в браузере, но все же я могу толькоДобавить h3 элементы в DOM, но не может удалить их. Также код работает в Firefox, но не в Google Chrome.

Ответы [ 2 ]

3 голосов
/ 10 июля 2011

Проблема в том, что вы используете переменную i в двух разных циклах.Когда внутренний цикл завершается, он всегда заканчивает настройкой i на rem_msg.length, что не позволит внешнему циклу когда-либо достигнуть своего состояния выхода, так что вы получите бесконечный цикл.вам просто нужно переименовать второй i, например, j, и все готово.

1 голос
/ 10 июля 2011

Я думаю, что это может быть искажено for:

for(var i=0;i<rem_msg.length;;i++)

У вас есть дополнительные ;, поэтому я думаю, что i++ не запускается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...