2009-08-27 117 views
3

我正在使用(或试图)JQuery Validation与WebForms/HTML。jQuery验证 - 使用点击验证,而不是提交

我有,基本上(简化了真正的HTML,只显示元素):

<input id="txtEmail"/> 
<input id="txtTicketID"/> 
<a id="create" href="#">Create a new ticket</a> 
<a id="find" href="#">Find this ticket</a> 

进行验证/操作的JavaScript是在这里:

$(function() { 
    $("#aspnetForm").validate({ 
     rules: { 
      txtEmail: { 
       required: true, 
       email: true 
       , 
       messages: { 
        required: "* enter your e-mail", 
        email: "* invalid e-mail" 
       } 
      }, 
      txtTicketID: { 
       required: true, 
       digits: true, 
       messages: { 
        required: "*", 
        digits: "* invalid ticket" 
       } 
      } 
     }, 
     onfocusout: true, 
     onkeyup: true, 
     onsubmit: false, 
     debug: true 
    }); 

    $("#create").click(function() { 
     if ($("#aspnetForm").valid()) { 
      var email = $("#txtEmail").val(); 
      if (email != "") 
       window.location = "CreateTicket.aspx?email=" + email; 
     } 
    }); 

    $("#find").click(function() { 
     if ($("#aspnetForm").valid()) { 
      var email = $("#txtEmail").val(); 
      var ticketID = $("#txtTicketID").val(); 
      if (email != "" && ticketID != "") 
       window.location = "DetailEditTicket.aspx?email=" + email + "&ticketID=" + ticketID; 
     } 
    }); 
}); 

它不工作。 。点击链接上的valid()会始终返回true,即使这些字段为空或错误。

当我输入东西,模糊等等时,没有任何东西使验证发生。

您是否看到缺少这方面的内容?

回答

4

validate(rules:{})需要包含name:{object}模式的选项,您传递的模式为id:{object}。尝试:

<input id="txtEmail" name="txtEmail"/> 
<input id="txtTicketID" name="txtTicketID"/> 
<a id="create" href="#">Create a new ticket</a> 
<a id="find" href="#">Find this ticket</a> 
+0

Steerpike是正确的,此外,您可以简化一点,用class =“required email”等标记您的输入,而不是将它们添加为上述规则。一旦你在窗体上调用验证,插件就会选择这些。 – lucas 2009-08-27 14:45:04

0

您可能错过了一些代码,但它看起来像是在调用函数'valid',但您已将其设置为'验证'。因此,您验证电子邮件和票证ID的功能根本没有运行。

+0

我应该在点击调用Validate()吗? – 2009-08-27 14:39:14

+2

.validate()用于设置表单验证,.valid()用于测试表单是否有效。所以不,最好在初始化时调用.validate()。 – jammus 2009-08-27 15:37:18