【问题标题】:javascript onblur function for each item within a loop循环中每个项目的javascript onblur函数
【发布时间】:2015-10-29 14:04:17
【问题描述】:

我已经在数据库的列中插入了一些项目,但是如何在循环中执行 onblur 函数来验证这些项目?例如,验证 NAME 如果为空则提示警报,如果 NRIC 长度小于一定长度则提示 alert msg。我的表现如何?

  <script>
  function fnfunction(??)
  {
    //no idea how to do validation for each item
  } 
  </script>
  <%
   String SQL   = "SELECT * FROM TB_BS_WITH UR";
   String  VALUE1 = "";
   String ROW_NO = "";
   String COL_NO = "";
    DB_Contact.makeConnection();
    DB_Contact.executeQuery(SQL);   
    while(DB_Contact.getNextQuery())
    {
        VALUE1 = DB_Contact.getColumnString("VALUE1");
        ROW_NO = DB_Contact.getColumnString("ROW_NO");
        COL_NO = DB_Contact.getColumnString("COL_NO");
    %>
   <table>
        <tr>
            <%StringTokenizer st1=n ew StringTokenizer(VALUE1, "^"); while(st1.hasMoreTokens()){%>
                <th class="fontSection">
                    <%=st1.nextToken() %>
                </th>
                <%}%>
        </tr>
        <%for(int i=0;i<Integer.parseInt(ROW_NO);i++){ %>
            <tr>
                <%for(int j=0;j<Integer.parseInt(COL_NO);j++){ %>
                    <td>
                        <input type="text"name="<%=j%>_NAME_<%=i %>" id="<%=j%>_NAME_<%=i %>" onblur="fnfunction(???)">
                    </td>
                    <%}%>
            </tr>
            <%}%>
    </table>
    <%
      } DB_Contact.takeDown();
    %>

当前输出...如何验证每一列?

【问题讨论】:

  • 你能想出一个解决方案,或者回答帮助吗?

标签: javascript java validation jsp


【解决方案1】:

要验证 blur,您可以执行以下操作。
不要在input 标签内内联分配事件,在页面加载后分配。

  window.addEventListener('load', initPage, false);

  // add blur event to all inputs
  function initPage(event) {
    var inputs = document.getElementsByTagName('INPUT');
    for (var i = 0; i < inputs.length; i++) {
      // only check text fields
      if (e.target.type === 'text') {
        inputs[i].addEventListener('blur', validateForm, false);
      }
    }
  }

  // check value of blurred element
  function validateForm(e) {
    e = e || window.event;
    e.target = e.target || e.srcElement;

    // assuming id will always be --> #_FieldName_#
    var fieldName = e.target.id.split('_')[1];

    switch (fieldName) {
      case 'Name':
        if (e.target.value === '') {
          alert(fieldName + ' cannot be blank!');
          e.target.focus();
        }
        break;

      case 'NRIC':
        if (Number(e.target.value) < 10) {
          alert(fieldName + ' cannot be less than 10!');
          e.target.focus();
        }
        break;
    }
  }

【讨论】:

  • hmm ..关于 fieldName .. 不是标题的名称 .. 它是一个输入标签 .. 我不能为它使用 switch case .. 名称将是 0_Name_0, 1_Name_0, 2_Name_0, 3_Name_0
  • 这就是为什么我在_上split 得到id 的中间部分
【解决方案2】:

你可以像下面这样(其中一种方式):--

在jsp中:-

<input type="text"name="<%=j%>_NAME_<%=i %>" id="<%=j%>_NAME_<%=i %>" onblur="validateInput("+<%=j%>+",this)">

看看:onblur="validateInput("+&lt;%=j%&gt;+",this)",this是当前输入元素

在javascript中:

 function validateInput(cellNo,currentInput){

    if(cellNo === 0){
       // get the value from currentInputand validate as per your requirement..
    }else if(cellNo == 1){
     // get the value from currentInputand and validate as per your requirement..
    }
     .
     .
     .
}

【讨论】:

  • hmm .. 不适用于我的情况.. 因为项目位置不固定.. 例如第一个表可能是 NAME^NRIC / FIN^DOB^OCCUPATION 而第二个表可能是 NAME^ NRIC / FIN^OCCUPATION
  • 如果我使用 cellNo == 3 来验证 dob 时会出现错误..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2018-12-21
  • 2020-08-24
相关资源
最近更新 更多