2010-07-24 126 views
2

是的,我知道这个问题已被问过几次。但我对这些答案感到困惑。我想我每次添加一个新的输入字段时都会以某种方式“刷新”或使用实时添加验证。jQuery验证:仅在第一个字段验证动态生成的字段

另外我检查了demo,我想我错过了一些东西。每次添加新字段时,我都没有看到任何添加验证的代码。

这是我的代码的简化版本:

$(function(){ 
    $('#testform').validate(); 

    var input1 = $('<input type="text" class="required" />'): 
    var input2 = $('<input type="text" class="required" />'): 
    var input3 = $('<input type="text" class="required" />'): 

    $('#testform').append(input1) 
       .append(input2) 
       .append(input3); 
}); 

我的HTML看起来像这样:

<form id='testform'> 
    <input type='submit' value='submit' /> 
</form> 

出于某种原因,验证只能在第一个元素。如果你填写文字,它会在onblur事件中起作用。但是一旦第一个输入字段有文本,表单就会提交。

其实我认为刚刚在打字时找到了答案,但无论如何我会加上这个问题,以防其他人遇到同样的问题。如果这是一个问题,我会马上删除它。

+0

只是一个侧面说明,'型=“测试”'不是一个有效的''元素:) – 2010-07-24 13:52:28

+0

我不知道你在说什么。 ^^ – Pickels 2010-07-24 13:54:46

回答

1

我会做的第一件事是为每个文本元素分配一个名称和ID,看看是否有所作为。我想你必须把你的$('#testform')。validate();};在$()。ready(function(){})块内部,这迫使jQuery在页面准备好之前不能启动表单验证(并且完全由浏览器呈现)

4

为了让jQuery验证起作用,添加的name属性

所以它应该是:

$(function(){ 
    $('#testform').validate(); 

    var input1 = $('<input name="one" type="test" class="required" />'): 
    var input2 = $('<input name="two" type="test" class="required" />'): 
    var input3 = $('<input name="thr" type="test" class="required" />'): 

    $('#testform').append(input1) 
       .append(input2) 
       .append(input3); 
}); 

在jQuery验证页面:

name属性需要inpu t元素,验证插件没有它就无法运行。通常name和id属性应该具有相同的值。

http://docs.jquery.com/Plugins/Validation/Reference