2012-05-23 129 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一样提交。