2015-05-04 169 views
0

我有一个表,我遍历每一行。 如果行背景颜色为绿色,并且其各自的复选框以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; 
     } 
    }      
    }); 
}); 

回答

2

您需要在外部函数中返回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; 
}); 
+0

谢谢Shane!上述代码在条件为真时不起作用。它总是阻止表单提交。 – Viral

+0

你可以使用event.preventDefault()来停止表单提交请参阅上面的编辑 – ShaneQful

+0

谢谢谢恩......它解决了这个问题。非常感谢。 – Viral

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事件按钮挂接到表单提交过程;我会使用formsubmit事件。

+0

感谢Crowder!你给了我一些非常好的信息。但是,当条件为真时,上面的代码不工作。它总是阻止表单提交。 – Viral

+0

@病毒:它必须是关于你如何检查复选框的东西。首先,'input [class =“linebox”]'是一个非常脆弱的选择器,如果因为任何原因向复选框添加第二个类,它将会失败。你用'linebox'类查找元素的常用方法是input.linebox。您需要使用内置于浏览器中的调试器来浏览代码,以了解为什么'ischk'始终为'0'。 –