jQuery返回false不工作
我有一个表,我遍历每一行。 如果行背景颜色为绿色,并且其各自的复选框以classbox作为linebox未被选中,我应该在点击提交时显示错误消息。 但返回false不起作用,表单正在提交。尽管消息正在显示。 我该如何解决这个问题? 以下是代码。jQuery返回false不工作
jQuery(document).on('click', '#add-All-button', function() {
$(".rowb").each(function() {
if($(this).css("background-color") == "rgb(71, 163, 71)") {
var ischk = 0;
var row = $(this);
if (row.find('input[class="linebox"]').is(':checked')) {
ischk++;
}
if(ischk==0) {
alert('Every green colored row should have one of the checkboxes checked.');
return false;
}
}
});
});
您需要在外部函数中返回false,在.each中返回false将仅打破循环。另一个可能需要用来停止表单提交的工具是event.preventDefault,它可以用来停止浏览器的默认行为,如转到链接或提交成形,但您需要更改按钮上的事件类型以适当地匹配。也就是说,您应该倾听的事件是提交的。查看下面的固定代码以获取更多详细信息。
jQuery(document).on('submit', '#add-All-button', function() {
var out = true;
$(".rowb").each(function() {
if ($(this).css("background-color") == "rgb(71, 163, 71)") {
var ischk = 0;
var row = $(this);
if (row.find('input[class="linebox"]').is(':checked')) {
ischk++;
}
if (ischk == 0) {
alert('Every green colored row should have one of the checkboxes checked.');
out = false;
}
}
});
if (!out) { event.preventDefault(); }
return out;
});
你没有返回false
你的事件处理程序的,只是你的$.each
回调。如果您还想从处理程序中返回false
,则在处理程序本身中需要一个return
语句。
例如,可能(见***
线):
jQuery(document).on('click', '#add-All-button', function() {
var rv; // *** By default it's `undefined`, which has no special meaning, so that's fine
$(".rowb").each(function() {
if ($(this).css("background-color") == "rgb(71, 163, 71)") {
var ischk = 0;
var row = $(this);
if (row.find('input[class="linebox"]').is(':checked')) {
ischk++;
}
if (ischk == 0) {
alert('Every green colored row should have one of the checkboxes checked.');
rv = false; // ***
return false;
}
}
});
return rv; // ***
});
边注:这种比较很可能在野外失败:
$(this).css("background-color") == "rgb(71, 163, 71)"
不同的浏览器返回的颜色信息以不同的格式,并且不要以您在(必要)中设置的相同格式返回值。 jQuery不会试图对此进行标准化。所以你回来的价值可能是"rgb(71, 163, 71)"
,但它也可能是"rgb(71,163,71)"
或"rgba(71, 163, 71, 0)"
或"rgba(71,163,71,0)"
或甚至"#47A347"
。而不是依靠以特定格式获取价值,您最好使用data-*
属性或通过jQuery data
函数跟踪的值。
附注2:我不会用click
事件按钮挂接到表单提交过程;我会使用form
的submit
事件。
感谢Crowder!你给了我一些非常好的信息。但是,当条件为真时,上面的代码不工作。它总是阻止表单提交。 – Viral
@病毒:它必须是关于你如何检查复选框的东西。首先,'input [class =“linebox”]'是一个非常脆弱的选择器,如果因为任何原因向复选框添加第二个类,它将会失败。你用'linebox'类查找元素的常用方法是input.linebox。您需要使用内置于浏览器中的调试器来浏览代码,以了解为什么'ischk'始终为'0'。 –
谢谢Shane!上述代码在条件为真时不起作用。它总是阻止表单提交。 – Viral
你可以使用event.preventDefault()来停止表单提交请参阅上面的编辑 – ShaneQful
谢谢谢恩......它解决了这个问题。非常感谢。 – Viral