JavaScript 检查并在提交按钮单击时动态地将文本添加到表格中

Posted

技术标签:

【中文标题】JavaScript 检查并在提交按钮单击时动态地将文本添加到表格中【英文标题】:JavaScript checking & adding text to a table dynamically on submit button click 【发布时间】:2012-11-05 09:29:14 【问题描述】:

基本上我的 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 文本字段是否为空白,如果是,则将其左侧的标签或跨度附加到输出“名字*”+“您必须输入名字”姓氏和性别也是如此。

问题是表中的文本没有用 appendchild 更新。当我将该语句包含在调试警报中时,该消息被附加然后消失。

onsubmit = "checkFields()" 的 javascript 代码如下。

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 调试器吗?

问候

大卫 D

【问题讨论】:

additional code 中,您是否从函数中返回false?如果您想停止表单提交,则需要这样做。并删除 onsubmit = = 周围的空格 您的浏览器有一个内置的 JS 调试器。 Chrome/Safari 的菜单中有开发者工具。 Firefox 有一个控制台,加上 Firebug 扩展,在 IE 中按 F12 来打开开发者工具。 如果您还没有考虑过并且需求允许,您应该考虑使用 jQuery 来完成客户端工作。甚至还有一个验证插件:docs.jquery.com/Plugins/Validation 我已经对其进行了编辑以删除 else 语句,因为我希望所有 3 个左侧文本都在对空或未选择字段作出反应的事件上进行更改。我使用 firefox Michael,所以我会研究 Firebug 【参考方案1】:

我认为由于 html 不正确,您的示例代码无法正常工作。 document.getElementById("last_name") 将返回未定义。

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

【讨论】:

【参考方案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>  

对表单中 onsubmit 按钮的未填充字段做出反应的 JavaScript 代码是:(有什么方法可以使此代码更简单??)

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;
  

诀窍是按照 Yury 的建议使用 onsubmit="return checkfields()" 然后在代码块中使用 window.checkFields = function() 等。

我有一个问题... JQuery 使用起来更简单,我在 JQuery 之前学习 JavaScript...我应该跳到 JQUery 吗? JQuery 也支持 AJAX 框架吗?

非常感谢

大卫

【讨论】:

以上是关于JavaScript 检查并在提交按钮单击时动态地将文本添加到表格中的主要内容,如果未能解决你的问题,请参考以下文章

验证检查带有单个提交按钮的动态文本框

根据最初检查的复选框值在后退按钮单击时重新加载 Angular 6 反应式表单

Javascript:单击提交按钮时如何将隐藏的输入标签附加到表单中?

如何在单击输入按钮时提交表单以及执行 javascript 函数?

避免 Angular2 在单击按钮时系统地提交表单

在单击提交按钮之前如何检查是不是生成了图像?