2011-04-17 59 views
5

我对jQuery非常陌生,我在窗体上写了一些验证逻辑。在这个美妙社区的帮助下,我能够了解如何发布我的表格,并阻止回发。困惑是否返回false;是否需要

我使用button.click()事件来做到这一点,我知道什么时候我需要保持表单发布,我必须把return false;,我明白为什么。例如:

var name = $("input#name").val(); 
if (name == "") 
{ 
    $("label#lblName").css('color','red'); 
    $("input#name").focus(); 
    return false;  
} 

我明白为什么在这种情况下返回false是很重要的。但在我的提交按钮点击事件的尽头还有一个返回false,像这样:

$(function() 
{ 
    $("#submitbutton").click(function() 
    { 
     //validate and submit form 

    return false; //WHY is this here? What purpose does it serve? 
    }); 
}); 

的原因,我问的是,我也写一个函数来更改标签颜色白回来的。模糊()。像这样:

$(function() 
{ 
    $("input#name").blur(function() 
    { 
     var name = $("input#name").val();  
     if (name == '') 
     { 
      $("label#lblName").css('color','red');  
     } 
     else 
     { 
      $("label#lblName").css('color',''); 
     } 
    //Do I need return false here? and why?  
    }); 

}); 

谢谢!

回答

6

return false jQuery中事件回调用于以停止事件传播,或事件冒泡

如果此元素的事件链中有多个回调,这意味着将不会调用返回false的事件之后的任何事件。

这在您发布的情况下非常有用。默认情况下,提交按钮具有附加事件,该事件将提交其包含的表单。绑定到此提交按钮的click事件时,使用return false将会阻止任何先前注册的事件发生 - 因此您的自定义click事件将被调用,并且表单将不会被提交。

对于大多数情况下,你不需要包括return false。只有当你认为在事件链中可能有另一个处理程序可以接收你正在处理的事件并以某种方式混淆了你的代码时,才有必要。

额外信息:

2

好像你已经知道这一点,但只是为了确保:

在jQuery中,return false;相当于调用event.stopPropagation()event.preventDefault()1。因此,它有助于防止默认操作(如提交表单)以及防止事件冒泡以避免其他处理程序在该事件上进行操作。

在您的提交按钮的点击处理程序的示例中,return false;具有取消提交单击按钮调用的默认操作的效果。所以这是必需的,除非你想要提交表单,而不管你在你的事件处理程序中做什么,而这可能不是这种情况。

回答有关blur()你的问题,你不应该return false;除非有要作用于这个事件有一个默认的blur行动阻止一些其他blur事件处理程序,你想要预防。