2

我正在开发一个使用 javascript-coder 的 gen_validatorv4 脚本的表单。(过去曾使用它取得巨大成功)。这张表格是为了让我工作的银行的出纳员可以将无效支票的信息发送回我们的会计部门,然后作为 Foxtrot 的 csv 文件被踢出。

我已经在 Firefox 和 Chrome 中测试了该脚本,没有任何问题。但是,在 IE 8 和 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/

4

3 回答 3

1

问题是由使用数字作为数据类型引起的。IE 不知道如何处理它。别人给了我这个花絮,我能够通过创建一个二维数组来修复它。

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

 stuff[#][fieldname]
 frmvalidator.addValidation("stuff[1][actnum]", "req", "Line #1: You must enter an account number!");
于 2013-05-08T12:26:13.413 回答
1

在我删除了[]包含 name 属性值的括号后工作正常。

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

您显然必须更新您的 js 以反映这一点。

于 2013-05-07T20:32:25.780 回答
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;
        }




    }

}

于 2016-11-20T10:46:13.950 回答