JavaScript проверка и добавление текста в таблицу динамически при нажатии кнопки отправки

В основном мой HTML выглядит так:

<form method="post" name="htmlform" onsubmit = "checkFields()">
  <table style="width: 479px;" border="30" cellspacing="3" cellpadding="10">
  <tbody>
  <tr>
  <td valign="top"><span id="firstNameSpan" >First Name *</span></td>
  <td valign="top"><input type="text" name="first_name" id="first_name"
                    size="30" maxlength="50" /></td>
  </tr>
  <tr>
  <td valign="top"><span id = "lastNameSpan" >Last Name *</span></td>
  <td valign="top"><input type="text" name="last_name" size="30" maxlength="50"/> 
      /td>
  </tr>
  <tr>
  <td style="text-align: center;" colspan="2"><input type="radio" name="sex" 
  value="male" /> Male <input type="radio" name="sex" 
  value="female" /> Female</td>
  </tr>
  <tr>
  <td style="text-align: center;" colspan="2"><input type="submit" value="submit" 
       /></td>
  </tr>
  </tbody>
  </table>
  </form>

Когда форма отправлена, событие onsubmit() проверяет, является ли текстовое поле first_name пустым, если это так, тогда к выходу "first name*" + добавляется метка или интервал слева от вас, "вы должны ввести имя" и аналогично для фамилия и пол.

Проблема в том, что текст в таблице не обновляется с помощью appendchild. Когда я включаю заявление в предупреждение об отладке, сообщение добавляется, а затем исчезает.

Ниже приведен код JavaScript для onsubmit = "checkFields()".

function checkFields() {
    var firstName = document.getElementById("first_name").value;
    var lastName = document.getElementById("last_name").value;
    if (firstName == "") {
        //<span style='color:red'> Please enter a first name </span>
        var nameHint = " Please enter a first name";
        var node = document.getElementById("firstNameSpan");
        //alert(node.appendChild(document.createTextNode(nameHint)) );
        //not working
        node.appendChild(document.createTextNode(nameHint));

    } if (lastName == "") {
        //additional code
    }
}

Заранее спасибо, ваша помощь очень ценится. Также есть ли отладчики JavaScript?

С уважением

Дэвид Д

2 ответа

Спасибо всем, я получаю веревки JFiddle, разделенный экран очень полезен, хотя сообщения об ошибках не полезны для отладки. Вот завершенный код (1) HTML (2) JavaScript.

<form method="post" name="htmlform" onsubmit="return checkFields();">
  <table style="width: 479px;" border="30" cellspacing="3" cellpadding="10">
  <tbody>
  <tr>
  <td valign="top"><span id="firstNameSpan" >First Name *</span></td>
  <td valign="top"><input type="text" name="first_name" id="first_name"
                                            size="30" maxlength="50" /></td>
  </tr>
  <tr>
  <td valign="top"><span id = "lastNameSpan" >Last Name *</span></td>
  <td valign="top"><input type="text" name="last_name" id="last_name" size="30" 
  maxlength="50" /></td>
  </tr>
  <tr>
  <td style="text-align: center;" colspan="2" id = "sexMessage">
      Please select Male or Female*</td>
  </tr>
  <tr>
  <td style="text-align: center;" colspan="2"><input type="radio"
   name="sex" value="male" /> Male <input type="radio" name="sex"
  value="female" /> Female</td>
  </tr>
  <tr>
  <td style="text-align: center;" colspan="2"><input type="submit" value="submit"    
   /></td>
  </tr>
  </tbody>
  </table>
  </form>  

Код JavaScript для реагирования на незаполненные поля кнопки onsubmit в форме: (есть ли способ сделать этот код проще??)

window.checkFields = function()
  {
  var firstName = document.getElementById("first_name");
  var lastName = document.getElementById("last_name");
  if(firstName.value == "")
  {
  //<span style='color:red'> Please enter a first name </span>
    var nameHint = " *Please enter a first name ";
    var fnNode = document.getElementById("firstNameSpan");
    while(fnNode.firstChild)
    {
        fnNode.removeChild(fnNode.firstChild)
    }
    fnNode.appendChild(document.createTextNode(nameHint));
    fnNode.style.color="red";

  } else{
      var nameHint = " First Name *";
      var fnNode = document.getElementById("firstNameSpan");
      while(fnNode.firstChild)
      {
        fnNode.removeChild(fnNode.firstChild)
      }
      fnNode.appendChild(document.createTextNode(nameHint));
      fnNode.style.color="black";
  }
  if (lastName.value == "")
  {
  //additional code
    var nameHint = " *Please enter a last name";
    var lnNode = document.getElementById("lastNameSpan");
    while(lnNode.firstChild)
    {
        lnNode.removeChild(lnNode.firstChild)
    }
    lnNode.appendChild(document.createTextNode(nameHint));
    lnNode.style.color="red";
  } else{
      var nameHint = " Last Name *";
      var lnNode = document.getElementById("lastNameSpan");
      while(lnNode.firstChild)
      {
        lnNode.removeChild(lnNode.firstChild)
      }
      lnNode.appendChild(document.createTextNode(nameHint));
      lnNode.style.color="black";
  }
      var radios = document.getElementsByName("sex");
      var radioValue = ""
      for(var i=0; i<radios.length; i++)
      {
          if(radios[i].checked)
          {
              radioValue = radios[i].value;
          }

      }
      if(radioValue === "")
      {
          var sexNode = document.getElementById("sexMessage");
          var nameHint = "*You did not choose a sex";
          while(sexNode.firstChild)
          {
              sexNode.removeChild(sexNode.firstChild);
          }
          sexNode.appendChild(document.createTextNode(nameHint));
          sexNode.style.color="red";
      } else {
          var sexNode = document.getElementById("sexMessage");
          var nameHint = "Please select Male or Female*";
          while(sexNode.firstChild)
          {
              sexNode.removeChild(sexNode.firstChild);
          }
          sexNode.appendChild(document.createTextNode(nameHint));
          sexNode.style.color="black";
      }               
      return false;
  }

Хитрость заключается в том, чтобы использовать, как предложил Юрий, метод onsubmit="return checkfields()", а затем в блоке кода использовать window.checkFields = function() {и т. Д.

Один вопрос, который у меня есть... это то, что JQuery намного проще в использовании, я изучаю JavaScript до JQuery... я должен вместо этого перейти к JQUery. Также поддерживает ли JQuery фреймворк AJAX?

Очень признателен

Дэвид

Я считаю, что ваш пример кода не работает из-за неправильного HTML. document.getElementById("last_name") вернет неопределенное.

http://jsfiddle.net/5E6my/1/

Другие вопросы по тегам