2012-05-23 161 views
17

我寫了一個網頁,用戶可以輸入存儲在數據庫中的日誌條目,然後使用ajax檢索並打印在頁面上。我對ajax還很陌生,想知道是否有人可以請我解釋一下return false;在我的代碼末尾做了什麼?甚至有必要?什麼是「返回false」;做?

如果我把return false後面的第二個ajax代碼不起作用!你能向我解釋爲什麼?

//handles submitting the form without reloading page 
$('#FormSubmit').submit(function(e) { 
    //stores the input of today's data 
    var log_entry = $("#LogEntry").val(); 
    // prevent the form from submitting normally 
    e.preventDefault(); 

    $.ajax({ 
     type: 'POST', 
     url: 'behind_curtains.php', 
     data: { 
      logentry: log_entry 
     }, 
     success: function() { 
      alert(log_entry); 
      //clears textbox after submission 
      $('#LogEntry').val(""); 
      //presents successs text and then fades it out 
      $("#entered-log-success").html("Your Entry has been entered."); 
      $("#entered-log-success").show().fadeOut(3000); 
     } 
    }); 
    //prints new log entries on page upon submittion 
    $.ajax({ 
     type: 'POST', 
     url: '/wp-content/themes/childOfFanwood/traininglog_behind_curtains.php', 
     data: { 
      log_entries_loop: "true" 
     }, 
     success: function(data) { 
      alert(data); 
      $("#log-entry-container").html(""); 
      $("#log-entry-container").html(data); 
     } 
    }); 
    return false; 
}); 
​ 
+0

停止默認表單提交行爲 – 2012-05-23 23:21:26

+0

@Dagon。不僅如此。 – gdoron

回答

35

我會寫在這裏是爲jQuery的事件
對vanilla JavaScript事件讀@ T.J如此。在回答


return false回調內部的底部克羅德評論阻止默認行爲。例如,在submit事件中,它不提交表單。

return false也停止冒泡,所以元素的父母將不知道發生的事件。

return false相當於event.preventDefault() + event.stopPropagation()

當然並且,return xxx線將不被執行之後存在的所有代碼。 (與所有的編程語言,我知道)

也許你有所幫助:
Stop event bubbling - increases performance?


一個「真正的」演示講解return falseevent.preventDefault()之間的區別:

Markup:

<div id="theDiv"> 
    <form id="theForm" > 
     <input type="submit" value="submit"/> 
    </form> 
</div>​ 

的JavaScript:

$('#theDiv').submit(function() { 
    alert('DIV!'); 
}); 
$('#theForm').submit(function(e) { 
    alert('FORM!'); 
    e.preventDefault(); 
});​ 

現在...當用戶提交表單,第一個處理程序的形式提交,其中preventDefault() - >形式將不會被提交,但該事件對氣泡div,觸發它的提交處理程序。

Live DEMO

現在,如果提交表單的處理程序將取消與return false冒泡:

$('#theDiv').submit(function() { 
    alert('DIV!'); 
}); 
$('#theForm').submit(function(event) { 
    alert('FORM!'); 
    return false; 
    // Or: 
    event.preventDefault(); 
    event.stopPropagation(); 
});​ 

股利甚至不知道有一個表單提交。

Live DEMO


是什麼return false香草做的JavaScript事件從DOM2處理器(addEventListener

返回假做什麼都沒有(沒有阻止默認又不停止冒泡;從微軟的DOM2處理程序(attachEvent),它可以防止默認但不冒泡;從DOM0處理程序(onclick="return ..."),它可以防止默認(只要你在屬性中包含返回值)但不冒泡;從一個jQuery事件處理程序中,它同時執行了這兩個操作,因爲這是一個jQuery事物。細節和現場測試 - T.J. Crowder

+1

+1回答實際問題,甚至作爲事後的想法 –

+0

+1是的,我正要寫關於'stopPropagation',但看到你已經提到它:) – VisioN

+0

這是否意味着,如果你有'e.preventDefault() ;'你不需要'返回false;'如果他們都做同樣的事情? – Nope

2

在這種情況下,return false;可以阻止默認操作(表單提交)。

雖然它可能會更好使用e.preventDefault();

+0

你是對的,它阻止了默認的操作,但它也停止了冒泡。 – gdoron

+0

'在這個例子中' - 表單提交不會冒泡。 – ahren

+0

你爲什麼這麼認爲? – gdoron

0

因爲阿賈克斯的你不這樣做你的形式與正常的方式提交。所以你必須返回false才能防止表單的默認行爲。

3

函數中的return語句之後的任何代碼都不會執行。它停止執行函數並使該函數的返回值通過(在這種情況下爲false)。你的功能是「提交」事件回調。如果此回調返回false,則表單不會實際提交。否則,它會像沒有JavaScript一樣提交。