添加规则后jquery表单验证无效

时间:2015-06-04 16:41:27

标签: javascript jquery jquery-validate

我已添加控件规则。但在表单验证后仍然没有显示错误。点击后我有验证输入框并检查空字符串。如果空字符串显示错误,否则调用ajax方法。但错误从未显示过。

编辑:

@Sparky建议。我正在更新我的帖子。我加载DOM后加载输入框和锚标记。然后我添加了CompanyName控件的验证规则。并且还在<a>点击中检查验证,这是错误的。但仍然没有显示错误文本。

HTML

<form action="/Address/AddAddress" id="frmAddress" method="post" name="frmAddress" novalidate="novalidate">
   <div id="AddEditAddressPlaceHolder>
           <input name="CompanyName" class="SPE-Formcontrol" id="CompanyName" type="text" value="">

          <a href="#" class="btn btn-success" onclick="javascript: submitcompanyfind();">Find Company</a>

        

的javascript

$.ajax({
                url: 'AddressTypesListChange',
                type: "Get",
                data: { 'addressType': $("#AddressTypeslist").val()},
                cache: false,
                success: function(data) {
                    $('#AddEditAddressPlaceHolder').html(data);
                   $("#frmAddress").validate({
                        errorClass: "validationError"
                    });
                    $("#CompanyName").rules("add", {required: true,messages: {required: "Required"}});

                }
            });


 function submitcompanyfind() {
      $("#frmAddress").validate();
      alert($("#frmAddress").valid()); // it is false but no error showing.
     if ($('#CompanyName').val() !="") {
         $.ajax({
             url: 'FindCompanyList',
             type: 'Post',
             data: $("#frmAddress").serialize(),
             success: function(data) {
                 var count = Object.keys(data).length;
                 //load the company table rows
                 LoadCompanyList(data);

                 $("#hdnDivComapnyfinder").show();
             },
             error: function(xhr, ajaxOptions, thrownError) {

             }
         });
     }

 }

页面加载后html源代码如下所示。

<div id="AddEditAddressPlaceHolder">
        <input name="CompanyName" class="SPE-Formcontrol 
        input-validation-error" id="CompanyName" type="text" 
       value="" aria-required="true" 
       aria-describedby="CompanyName-error" aria-invalid="true">

    </div>

2 个答案:

答案 0 :(得分:1)

编辑:以下答案适用于OP original version of his question

问题是由于在单击提交按钮时触发的函数内部错误地调用.validate()方法而引起的。

.validate()方法是插件的初始化,只在DOM就绪时调用一次。

另一个问题是ajax()的位置。 The .ajax() only belongs inside the submitHandler option of the .validate() method

$(document).ready(function() {

    $("#frmAddress").validate({
         rules: {
             CompanyName: {
                 required: true
             }
         },
         messages: {
             CompanyName: {
                 required: "Required"
             }
         },
         errorClass: "validationError",
         submitHandler: function(form) {
             // your ajax function here,
             return false;
         }
     });

});

不要忘记从&#34;提交按钮&#34; ...

中删除内联JavaScript
<a href="#" class="btn btn-success">Find Company</a>

答案,因为您使用的是锚标记,而不是真正的type="submit" buttoninput,您需要编写click处理程序通过以编程方式调用submit ...

来触发验证的函数
$('#frmAddress a').on('click', function() {
    $('#frmAddress').submit();
});

工作演示:http://jsfiddle.net/3nsapjrh/

您无需将novalidate="novalidate"属性放在<form>标记内。该插件已经为您动态执行此操作。

答案 1 :(得分:1)

第二个回答:发布以回应编辑的OP。

我不打算将特定代码包含在自最初发布以来已彻底改变的问题中。相反,我将回顾在这种情况下需要遵循的关键点......

  1. 加载页面,包括相关插件。

  2. 触发加载和/或创建表单和/或其所有输入字段的ajax() {表单现已完全存在于页面上}

  3. 在新创建的表单上调用.validate() 初始化插件。您不需要.rules()方法,因为此时您可以在.validate()内声明规则。

  4. 备注

    • 调用.validate()后,您无法再以任何理由再次调用它。您只能使用rules()方法动态添加/删除规则。

    • 您永远不需要任何内联JavaScript。 删除您的onclick="javascript: submitcompanyfind();"submitcompanyfind()功能。

    • 如果您不使用type="submit",则需要构建一个简单的click处理程序来触发.submit()。如果在调用click处理程序时锚标记尚不存在,则只需"delegate" it

      $('#frmAddress').on('click', 'a', function() {
          $(this).submit();
      });
      
    • 如果您使用ajax()提交表单,则必须使用ajax()方法的.validate()函数within the submitHandler option

      < / LI>