1

我有许多通过加号和减号动态添加的输入。所有这些输入都将添加到 div encdomlocal 中。我使用以下代码验证输入,然后添加 css,但它没有按预期工作。即它只验证 div 中的第一个输入框。

$('#encdomlocal input:nth-child(2)').blur(function() {
    var REGEX = /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/;
if (REGEX.test($("#encdomlocal input:nth-child(2)").val())) {
  $(this).removeClass();
  $(this).addClass("good");
} 
    else {
      $(this).removeClass();
      $(this).addClass("bad");
   }
});

任何帮助都会很棒,谢谢....

4

1 回答 1

1

如果使用 jQuery 1.7+,则需要为动态创建的输入委托,然后使用on

$(document).on('blur','#encdomlocal input:nth-child(2)',function() {

否则,您可以使用委托jquery 1.6 及更低版本

$(document).delegate('#encdomlocal input:nth-child(2)','blur',function() {

document可以替换为任何父元素

更新:

if (REGEX.test($(this).val())) { //<-- I don't know what you were testing but using $(this) works here
    $(this).removeClass();
    $(this).addClass("good");
}
else {
    $(this).removeClass();
    $(this).addClass("bad");
}

这是更新的小提琴http://jsfiddle.net/9DW8f/9/

你正在使用

if (REGEX.test($("#encdomlocal input:nth-child(2)").val()))

它正在返回一组元素,因此您没有测试触发blur事件的当前文本框

jQuery 对象:包装集:选择器返回一个称为“包装集”的 jQuery 对象,它是一个类似数组的结构,包含所有选定的 DOM 元素。您可以像数组一样遍历包装集或通过索引器访问单个元素(例如 $(sel)[0])。更重要的是,您还可以对所有选定的元素应用 jQuery 函数。<

如果您要使用相同的正则表达式,您可以通过用逗号分隔来添加另一个选择器

$("#encdomlocal").on("blur", "input:nth-child(2),otherSelector",//<--- use this if regex for validation is the same

如果您使用的是新的正则表达式,您可以使用

$(document).on('blur','otherSelector',function() {
    // validation code goes here.  You can pretty much copy the other one and change the regex to what you need
});
于 2012-07-03T21:41:15.490 回答