2011-04-17 60 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事件處理程序,你想要預防。