2010-04-22 86 views
2

嗨,我试图用jQuery验证插件做几件事情,似乎卡住在一个地方。jQuery动态验证

下面是一些代码:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('#myform').validate(); 
     $('#email').rules('add', {required: true, messages: {required: 'email is required'}}); 
     $('#phone').rules('add', {required: true, messages: {required: 'phone is required'}}); 
     $('#validate').click(function(){ 
      $('#result').text($('#myform').validate().form()); 
      return false; 
     }); 
    }); 
</script> 
<form id="myform"> 
<div>email:<input type="text" id="email" /></div> 
<div>phone:<input type="text" id="phone" /></div> 
<div id="result"></div> 

<input id="valdate" type="image" src="images/submit.png" /> 
</form> 

因此我不断收到一个错误的错误消息。如果我点击提交按钮'电话是必需的'显示在电子邮件输入附近,'电子邮件是必需的'没有显示出来。

此代码有什么问题?

+0

尝试先添加规则,然后调用$('#myform').validate()。 – 2010-04-22 14:33:33

回答

2

好吧好像我发现了这个问题。

HAVE添加名称属性元素无论如何。 在我的示例中,如果为输入元素添加适当的名称,它将很好。

1

以下方法:

<script type="text/javascript"> 
    $(function(){ 
     $('#myform').validate({ 
      rules: { 
       phone: 'required', 
       email: 'required' 
      }, 
      messages: { 
       phone: 'phone is required', 
       email: 'email is required' 
      } 
     }); 
    }); 
</script> 

与添加name属性的每个输入字段一起,完美地工作。

2

您可能会考虑下面的内容。阅读和调试有点清晰。由于您使用的标准规则类似于“必需”,因此除非您想要不同的东西,否则不必指定消息。规则和消息由输入字段的名称(例如电子邮件)标识。

errorPlacement选项用于指定消息的位置。您不必包含此选项;默认是将消息追加到输入字段。但是,如果你有布局div或需要特殊位置的信息在收音机上,或者你有什么,这是做这件事的地方。

$(document).ready(function(){ 
    $('#myform').validate({ 
     rules:{ 
     email: "required", 
     phone: {required:true, minlength:7} 
     }, 
     messages:{ //not required as default message for "required" rule makes same text 
     email: "email is required", 
     phone: "phone is required", 
     }, 
     errorPlacement: function(error, element) { //this is where to put positioning rules 
     error.appendTo(element.parent()); //just an example 
     } 
    }); 
}); 
+0

@kpomka:实际上,除了更改字段名称,我已经有完全相同的代码已经工作。 – dnagirl 2010-04-22 14:50:59

0

首先尝试添加规则,然后调用$( '#myForm的')。验证()

它不会工作。您必须先调用验证方法。

使用输入名称接近

我知道我可以用它作为名字你上面提到的事情。 但不幸的是,我将不得不使用ID。

内容将不会保持不变。它会根据一些规则而有所不同。所以几乎每次我都会有不同的页面。 会有许多不同ID的控件。许多验证组等。

所以使用“名称方法”只是不符合我的要求。

任何想法如何使用$(选择器).rules('add')的方法?

P.S. 我发现下面的例子http://www.coldfusionjedi.com/index.cfm/2009/2/22/Using-jQuery-to-add-form-fields--with-validation,它工作的很不错,代码中没有什么特别的。

+2

如果你正在生成动态字段,可能你也会生成它们的ID。只需使用相同的名称值。即'' – dnagirl 2010-04-22 16:10:12