我有一个页面,已成功使用jQuery验证插件来验证几个文本字段。有几个提交页面上的按钮,我已经配置如下验证:
_validator = $("#ftsEditTripForm").validate({
onkeyup: false,
submitHandler: function() {}
});
我注册下列click事件处理程序在页面上所有提交按钮:
function clickHandler(jqEvent) {
var action = jqEvent.target.id;
if (action !== "cancel") {
_form$.validate();
if (_validator.numberOfInvalids() === 0) {
submitForm(action);
}
} else {
confirmCancel(action);
}
}
function submitForm(action) {
$(".flowEvent").attr("name", "_eventId_" + action);
if (action === "submit") {
$("input[name=status]").val("S");
} else {
$("input[name=status]").val("D");
}
_form$[0].submit();
}
这有一直工作正常。直到用户点击其中一个提交按钮,才会进行验证,如果该按钮是“取消”按钮,则会要求用户确认他们希望在实际提交页面之前丢失对该页面所做的任何更改。因此,如果用户单击“取消”按钮,然后单击“否”按钮,表示他们不想继续取消操作,我们将停止提交页面。
现在我已经将选项卡添加到导航栏中,并且如果用户单击其他选项卡以外的选项卡,则需要执行同样的操作。该标签被实现为div的,并且我已经定义了以下点击事件处理这些div:
function tabClickHandler(jqEvent) {
var target = jqEvent.target;
while (! $(target).hasClass("navTab")) {
target = target.parentNode;
}
var tabNumber = target.dataset.tabnumber;
_form$.validate();
if (_validator.numberOfInvalids() === 0) {
$("input[name=tabNumber]").val(tabNumber);
submitForm("navbar");
}
}
我的问题是,当我点击一个选项卡上_validator.numberOfInvalids()总是返回0。我在我的验证代码中放置了一个断点,当我单击一个选项卡时,它不会被调用。因此,即使存在验证错误,也始终提交该页面。
我已经尝试了一些东西 - 用于验证插件的onsubmit和submitHandler选择不同的值,改变标签的div到按钮 - 没有成功。
我希望有人能指出我正确的方向。我必须以这种或那种方式工作,并且我想继续使用验证插件。
感谢您阅读这篇文章。
Thom