我已添加控件规则。但在表单验证后仍然没有显示错误。点击后我有验证输入框并检查空字符串。如果空字符串显示错误,否则调用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>
答案 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"
button
或input
,您需要编写click
处理程序通过以编程方式调用submit ...
$('#frmAddress a').on('click', function() {
$('#frmAddress').submit();
});
工作演示:http://jsfiddle.net/3nsapjrh/
您无需将novalidate="novalidate"
属性放在<form>
标记内。该插件已经为您动态执行此操作。
答案 1 :(得分:1)
第二个回答:发布以回应编辑的OP。
我不打算将特定代码包含在自最初发布以来已彻底改变的问题中。相反,我将回顾在这种情况下需要遵循的关键点......
加载页面,包括相关插件。
触发加载和/或创建表单和/或其所有输入字段的ajax()
。 {表单现已完全存在于页面上}
在新创建的表单上调用.validate()
初始化插件。您不需要.rules()
方法,因为此时您可以在.validate()
内声明规则。
备注强>:
调用.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。