2010-08-04 118 views
6

我很难让jQuery验证插件按我的需要工作。请与我裸露,因为我没有JQ专家:).valid()只验证jQuery验证插件的第一个输入

我所拥有的是几个所需输入的形式,规则如下显示:

$("#makeEvent").validate({ 
    onfocusout: false, 
    rules: { 
     name: { 
      required: true, 
      minLength: 2, 
      maxLength: 100 
     }, 
     host: { 
      required: true, 
      minLength: 2, 
      maxLength: 100 
     }, 
     startDate: { 
      required: true, 
      date: true 
     }, 
     endDate: { 
      required: true, 
      date: true 
     }, 
     desc: { 
      required: true, 
      minLength: 10, 
      maxLength: 255 
     }, 
     webpage: { 
      required: false, 
      url: true 
     }, 
     email: { 
      required: true, 
      email: true 
     }, 
    } 
}); 

现在我有一个自定义的。点击()调用在那里我想验证表单,然后在允许他们发送表单之前显示用户的预览。请参阅下面的功能:

$('#submitPreview').click(function() { 
    if($("#makeEvent").valid() === false) { 
     //What to do if validation fails 
    } else if($("#makeEvent").valid() === true) { 
     //Show the preview and let the user either make changes or submit the final result 
    } 
}); 

但是,什么情况是,该功能仅验证第一输入(名称),甚至验证它错误地(规则最少需要2个字符,它仍然只用1个字符验证如果没有添加任何字符,它只会返回false)。

也许我的方法并不是最好的,所以我都乐于接受任何建议。如果你想看看凌乱的源代码,你可以看到这里的功能:http://event.gusthlm.se/make.php

谢谢!

回答

19

我可以看到的两个问题是,您没有在输入字段上使用name属性,并且您使用name作为其中一个ID(导致表单提交时IE的各种悲伤)。

我建议将名称属性的输入,选择和textarea元素和不断变化的“名”,以类似“thename”:

<label for="thename">Börjar</label> 
<input type="text" name="thename" id="thename"/> 
+0

你猜怎么着?这解决了这个问题。我永远都不会猜到......谢谢! – 2010-08-04 16:11:57

+0

我知道这是旧的,但我有一个问题,我不能有名称字段。我使用Stripe验证信用卡,并保持信用卡信息不会触及我们的服务器,因此我们必须排除name属性。我也很好奇为什么name属性对客户端验证有任何影响? – computrius 2012-11-05 14:53:23

+0

@computrius,因为jQuery Validate插件需要'name'属性......开发者决定插件应该跟踪输入的方式。 – Sparky 2013-06-26 17:08:51

相关问题