Javascript 什么是;返回false&引用;做

Javascript 什么是;返回false&引用;做,javascript,jquery,ajax,Javascript,Jquery,Ajax,我编写了一个网页,用户可以在其中输入存储在数据库中的日志条目,然后使用ajax检索并打印到该网页上。我对ajax还是个新手,想知道是否有人能向我解释一下返回false的是什么在我的代码末尾做什么?甚至有必要吗 如果我把第二个ajax代码放在return false之后,代码就不起作用了!你能解释一下为什么吗 //handles submitting the form without reloading page $('#FormSubmit').submit(function(e) {

我编写了一个网页,用户可以在其中输入存储在数据库中的日志条目,然后使用
ajax
检索并打印到该网页上。我对
ajax
还是个新手,想知道是否有人能向我解释一下
返回false的是什么在我的代码末尾做什么?甚至有必要吗

如果我把第二个ajax代码放在
return false
之后,代码就不起作用了!你能解释一下为什么吗

//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;
});
​
我在这里写的内容适用于jQuery事件
对于普通javascript事件,请阅读答案底部的@T.J.Crowder评论


在回调中返回false
可防止默认行为。例如,在
submit
事件中,它不提交表单

return false
也会停止冒泡,因此元素的父元素不会知道事件发生了

返回false
相当于
事件.preventDefault()
+
事件.stopPropagation()

当然,
返回xxx
行之后存在的所有代码都不会被执行。(与我所知道的所有编程语言一样)

也许你会觉得这很有帮助:


解释
返回false
事件.preventDefault()之间差异的“真实”演示:

标记:

<div id="theDiv">
    <form id="theForm" >
        <input type="submit" value="submit"/> 
    </form>
</div>​
现在。。。当用户提交表单时,第一个处理程序是表单提交,它将不会提交表单,但事件将冒泡到div,从而触发其提交处理程序

现在,如果表单submit的处理程序将取消冒泡,返回false

$('#theDiv').submit(function() {
    alert('DIV!');
});
$('#theForm').submit(function(event) {
    alert('FORM!');
    return false;   
    // Or:
    event.preventDefault(); 
    event.stopPropagation();
});​
该部门甚至不知道有提交表格


在普通javascript事件中,
返回false
做什么

从DOM2处理程序(
addEventListener
)返回false完全不起作用(既不阻止默认值也不停止冒泡;从Microsoft DOM2 ish处理程序(
attachEvent
)返回false,它阻止默认值,但不冒泡;从DOM0处理程序(
onclick=“return…”
)返回false,它阻止默认值(前提是在属性中包含返回值)但不冒泡;从jQuery事件处理程序中,它可以同时执行这两项操作,因为这是jQuery的事情。这里有详细信息和实时测试–T.J.Crowder


在本例中,
返回false;
阻止默认操作(即表单提交)


尽管使用
e.preventDefault()可能更好由于ajax,您不希望表单以正常方式提交。因此您必须返回false以防止表单的默认行为。

函数中
return
语句之后的任何代码将永远不会执行。它停止函数的执行,并传递此函数的返回值(
false
,在本例中)。您的函数是“提交”事件回调。如果此回调返回
false
,则不会实际提交表单。否则,将像在没有JavaScript的情况下一样提交表单。

返回语句结束函数执行
这很重要。使用return会导致代码短路并立即停止执行,从而阻止下一行代码执行

停止默认表单提交行为没错,它会阻止默认操作,但也会停止冒泡。“在本例中”-表单提交不会冒泡。抱歉,看起来我是wrong.submit事件不冒泡-似乎这只在最罕见的情况下有用。+1用于回答实际问题,即使是事后思考+1是的,我正要写关于
stopPropagation
的文章,但看到你已经提到了:)这是否意味着如果你有
e.preventDefault()
如果它们都做相同的事情,你不需要返回false;
另请参见。@FrançoisWahl。另一种方法是…
返回false
e.preventDefault();+e.stopPropagation()
。如果你想要两者,只要
返回false即可。
$('#theDiv').submit(function() {
    alert('DIV!');
});
$('#theForm').submit(function(event) {
    alert('FORM!');
    return false;   
    // Or:
    event.preventDefault(); 
    event.stopPropagation();
});​