jquery:使用(for)函数中的keyup检查每个表单

时间:2012-08-31 02:05:55

标签: jquery

我正在使用(for)添加多个输入表单 我想用keyup检查这个表单 但它总是只检查第一个表格

这是代码

for (i = 0; i < 5; i++) {
    $('input[name*="morein"]').keyup(function () {
        var value = $(this).val();
        var moreincheck = $("#moreincheck");
        if (value > 60) {
            moreincheck.css('display', 'block');
            moreincheck.text("error cant add more than 60");
        } else {
            moreincheck.css('display', 'none');
        }
    }).keyup();

    $("#divTxt").append('<inputname="morein[]"  type="text" />' + '<span id="moreincheck" class="checkerror"></span>');
}

2 个答案:

答案 0 :(得分:1)

使ID唯一,或者您可以使用类,并将事件绑定部分从循环中分离出来。

for (var i = 0; i < 5; i++) {
  $("#divTxt")
    .append('<input name="morein[]" type="text" class="morein" />')
    .append('<span class="checkerror"></span>');
}

// bind the event handler
$('input.morein').keyup(function () {
    var $this = $(this);
    var moreincheck = $this.next('.checkerror');
    // use .length to check the length
    if ($this.val().length > 60) {
        moreincheck.text("error cant add more than 60").show();
    } else {
        moreincheck.hide();
    }
});

The working demo.

答案 1 :(得分:0)

ID必须唯一! (你注意到了原因)。此外,您将在每次迭代中向所有input[name*="morein"]重新添加相同的事件处理程序。

最好首先创建元素,绑定事件处理程序并使用DOM遍历来查找相应的元素。例如:

for (i = 0; i < 5; i++) {
   $('<input name="morein[]"  type="text" /><span class="checkerror"></span>').appendTo('#divTxt');
}

$('input[name*="morein"]').keyup(function () {
    var value = $(this).val();
    var moreincheck = $(this).next('span.checkerror');
    if (value > 60) {
        moreincheck.css('display', 'block');
        moreincheck.text("error cant add more than 60");
    } else {
        moreincheck.css('display', 'none');
    }
});