2013-04-29 27 views
1

我正在使用javascript-coder的gen_validatorv4腳本。 (曾經使用它取得巨大成功)。這種形式是爲了讓我工作的銀行的出納員能夠將信息放在無效的支票上,發回給我們的會計部門,並作爲Foxtrot的csv退出。使用gen_validatorv4.js在Internet Explorer中驗證數組中的項目

我已經在Firefox和Chrome中測試了腳本,沒有問題。但是,在IE 8和IE 9中,我收到了消息「第1行:您的帳號必須是數字!」,這是驗證錯誤,因爲沒有在該行中添加數字,並且據我所知,它是因爲我正在使用一個數組。當嘗試在maxlen下執行時,它會再次出現錯誤並重新出現錯誤。我使用數組(由前面的表單創建),因爲在任何給定時間都有可能提交的可變數量的檢查。

任何人有任何想法如何使它在Internet Explorer中正常工作?

更新:http://jsfiddle.net/syran/xL2EB/10/ 我從js-methods添加了array-0.9.js文件,並且稍微解決了這個問題。它現在正確地驗證了單選按鈕上的第一行項目,但是在那一點上失敗了。如果我刪除單選按鈕檢查,它將在num和maxlen驗證的第二行上失敗。請檢查小提琴的更新代碼,並添加第二行。

HTML代碼:

<form name="checkvoid" method="post"> 
<table id="mytable" border="1"> 
    <tbody> 
     <tr> 
      <td nowrap>Branch Number: 
       <input type="text" name="bid" value="1" size="3"> 
      </td> 
      <td colspan="6"> 
       <input type="submit" value="Submit Voided Checks"> 
      </td> 
     </tr> 
     <tr> 
      <td align="center">Date</td> 
      <td align="center">Account #</td> 
      <td align="center">Serial #</td> 
      <td align="center">Amount</td> 
      <td>MO</td> 
      <td>CC</td> 
     </tr> 
     <tr class="check"> 
      <td> 
       <select name="1[date][month]"> 
        <option value="1">Jan</option> 
        <option value="2">Feb</option> 
        <option value="3">Mar</option> 
        <option value="4" selected>Apr</option> 
        <option value="5">May</option> 
        <option value="6">Jun</option> 
        <option value="7">Jul</option> 
        <option value="8">Aug</option> 
        <option value="9">Sep</option> 
        <option value="10">Oct</option> 
        <option value="11">Nov</option> 
        <option value="12">Dec</option> 
       </select> 
       <select name="1[date][day]"> 
        <option value="1">1</option> 
        <option value="2">2</option> 
        <option value="3">3</option> 
        <option value="4">4</option> 
        <option value="5">5</option> 
        <option value="6">6</option> 
        <option value="7">7</option> 
        <option value="8">8</option> 
        <option value="9">9</option> 
        <option value="10">10</option> 
        <option value="11">11</option> 
        <option value="12">12</option> 
        <option value="13">13</option> 
        <option value="14">14</option> 
        <option value="15">15</option> 
        <option value="16">16</option> 
        <option value="17">17</option> 
        <option value="18">18</option> 
        <option value="19">19</option> 
        <option value="20">20</option> 
        <option value="21">21</option> 
        <option value="22">22</option> 
        <option value="23">23</option> 
        <option value="24">24</option> 
        <option value="25">25</option> 
        <option value="26">26</option> 
        <option value="27">27</option> 
        <option value="28">28</option> 
        <option value="29" selected>29</option> 
        <option value="30">30</option> 
        <option value="31">31</option> 
       </select> 
       <select name="1[date][year]"> 
        <option value="2012">2012</option> 
        <option value="2013" selected>2013</option> 
       </select> 
      </td> 
      <td> 
       <input type="text" name="1[actnum]" size="10" value="1"> 
      </td> 
      <td> 
       <input type="text" name="1[serial]" size="10" value="1"> 
      </td> 
      <td>$ 
       <input type="text" name="1[amount]" size="10" value="1"> 
      </td> 
      <td> 
       <input type="radio" name="1[type]" value="1" CHECKED> 
      </td> 
      <td> 
       <input type="radio" name="1[type]" value="2"> 
      </td> 
      <tr> 
       <td colspan="6"> 
        <input type="checkbox" name="certify" value="1">I certify that all the information above is correct.</td> 
      </tr> 
    </tbody> 
</table> 
<input type="hidden" name="action" value="process"> 

使用Javascript:

var frmvalidator = new Validator("checkvoid"); 
frmvalidator.addValidation("bid", "req", "Please enter your Branch Number!"); 
frmvalidator.addValidation("bid", "num", "Your Branch Number should be a Number!"); 
frmvalidator.addValidation("1[actnum]", "req", "Line #1: You must enter an account number!"); 
frmvalidator.addValidation("1[actnum]", "num", "Line #1: Your Account Number must be a number!"); 
frmvalidator.addValidation("1[actnum]", "maxlen=8", "Line #1: Your Account Number cannot exceed 8 numbers!"); 
frmvalidator.addValidation("1[serial]", "req", "Line #1: You must enter a serial number!"); 
frmvalidator.addValidation("1[serial]", "num", "Line #1: Your Serial Number must be a number!"); 
frmvalidator.addValidation("1[serial]", "maxlen=10", "Line #1: Your Serial Number cannot exceed 10 numbers!"); 
frmvalidator.addValidation("1[amount]", "req", "Line #1: You must enter an amount!"); 
frmvalidator.addValidation("1[amount]", "num", "Line #1: Your Amount must be a number!"); 
frmvalidator.addValidation("1[type]", "selone", "Line #1: You must select either Money Order or Cashier's Check!"); 
frmvalidator.addValidation("certify", "shouldselchk", "Your must certify that the form is correct!"); 

我有它的工作,而無需使用在IE中的陣列:http://jsfiddle.net/syran/xL2EB/4/

+0

JS-方法幫助了一些,但仍然有驗證陣列的問題。 – 2013-05-07 15:26:39

回答

1

工作得很好我除去[]後括號,你有包裝你的吶我的財產價值。

<input type="text" name="1[actnum]" size="10" value="1"><input type="text" name="1actnum" size="10" value="1">

顯然,你需要更新你的JS來反映這一點。

1

問題是由於使用數字作爲數據類型而引起的。 IE不知道如何處理它。其他人給了我這個小竅門,我能夠通過創建一個二維數組來解決它。

http://jsfiddle.net/syran/xL2EB/12/

stuff[#][fieldname] 
frmvalidator.addValidation("stuff[1][actnum]", "req", "Line #1: You must enter an account number!"); 
1

我有同樣的問題,我改變add_validation功能。 你可以替換gen_validatorv4.js的add_validation功能如下:

function add_validation(itemname, descriptor, errstr) 
 
{ 
 
    var condition = null; 
 
    if (arguments.length > 3) 
 
    { 
 
     condition = arguments[3]; 
 
    } 
 
    if (!this.formobj) 
 
    { 
 
     alert("Error: The form object is not set properly"); 
 
     return; 
 
    } 
 

 

 
    var itemobj = this.formobj[itemname]; 
 

 

 
    var i=0; 
 
    for (var key in itemobj) 
 
    { 
 
     i=parseInt(i)+1; 
 
     var errtmp=""; 
 
     if(typeof(itemobj[key]) !="object" || itemobj[key]==null || itemobj[key].name==null ) continue; 
 

 
     if(itemobj[key].name.toString().indexOf("[]") >1) 
 
     { 
 
       if (itemobj[key].length && isNaN(itemobj[key].selectedIndex)) 
 
      //for radio button; don't do for 'select' item 
 
      { 
 
       // itemobj[key] = itemobj[key][0]; 
 
      } 
 
      if (!itemobj[key]) 
 
      { 
 
       alert("Error: Couldnot get the input object named: " + itemname); 
 
       return; 
 
      } 
 
      if (true == this.validate_on_killfocus) 
 
      { 
 
       itemobj[key].onblur = handle_item_on_killfocus; 
 
      } 
 
      if (!itemobj[key].validationset) 
 
      { 
 
       itemobj[key].validationset = new ValidationSet(itemobj[key], this.show_errors_together); 
 
      } 
 
      if(typeof(itemobj[key].validationset.add)=="function") 
 
      { 
 

 
       var errtmp=errstr.replace("{num}",i) ; 
 
       itemobj[key].validationset.add(descriptor, errtmp, condition); 
 
       itemobj[key].validatorobj = this; 
 
      } 
 

 
     } 
 
     else 
 
     { 
 
      var itemobj = this.formobj[itemname]; 
 

 
      if (itemobj.length && isNaN(itemobj.selectedIndex)) 
 
      //for radio button; don't do for 'select' item 
 
      { 
 
       itemobj = itemobj[0]; 
 
      } 
 
      if (!itemobj) 
 
      { 
 
       alert("Error: Couldnot get the input object named: " + itemname); 
 
       return; 
 
      } 
 
      if (true == this.validate_on_killfocus) 
 
      { 
 
       itemobj.onblur = handle_item_on_killfocus; 
 
      } 
 
      if (!itemobj.validationset) 
 
      { 
 
       itemobj.validationset = new ValidationSet(itemobj, this.show_errors_together); 
 
      } 
 
      itemobj.validationset.add(descriptor, errstr, condition); 
 
      itemobj.validatorobj = this; 
 
      break; 
 
     } 
 

 

 

 

 
    } 
 

 
}

相關問題