我有一张桌子,我遍历每一行。 如果行背景颜色为绿色,并且未选中其类别为linebox的相应复选框,则应在单击提交时显示错误消息。 但返回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;
}
}
});
});
答案 0 :(得分:7)
您没有从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
事件来挂钩表单提交过程;我改为使用submit
的{{1}}事件。
答案 1 :(得分:3)
你需要在外部函数中返回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;
});