0

我正在使用 (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>');
}
4

2 回答 2

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();
    }
});

工作演示。

于 2012-08-31T02:15:14.187 回答
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');
    }
});
于 2012-08-31T02:14:10.283 回答