什么是“回归虚假”;做?

时间:2012-05-23 23:19:42

标签: javascript jquery ajax

我写了一个网页,用户可以在其中输入存储在数据库中的日志条目,然后使用ajax检索并打印在页面上。我仍然是ajax的新手,并且想知道是否有人可以向我解释return 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;
});
​

5 个答案:

答案 0 :(得分:36)

我在这里写的内容适用于 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()之间的区别:

<强>标记:

<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() - &gt;表单将不会被提交,但事件会冒泡到div,触发它的提交处理程序。

Live DEMO

现在,如果表单提交的处理程序将使用return false取消冒泡:

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

div甚至不知道有表格提交。

Live DEMO


return false在香草javascript活动中做了什么

  

从DOM2处理程序返回false(addEventListener)什么都不做(既不会阻止默认也不会停止冒泡;从Microsoft DOM2-ish处理程序(attachEvent),它会阻止默认处理程序,但不会冒泡;从DOM0处理程序(onclick="return ..."),它阻止默认(假设你包含属性中的返回)但不冒泡;从jQuery事件处理程序,它同时执行这两个,因为这是一个jQuery的东西。现场测试 - TJ Crowder

答案 1 :(得分:3)

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

答案 2 :(得分:2)

在这种情况下,return false;会阻止默认操作(表单提交)。

尽管使用e.preventDefault();

可能更好

答案 3 :(得分:0)

因为ajax你不能以正常的方式提交你的表格。因此,您必须返回false以防止表单的默认行为。

答案 4 :(得分:0)

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