"return false" 是什么意思?做?

IT技术 javascript jquery ajax
2021-01-31 10:31:01

我写了一个网页,用户可以在其中输入存储在数据库中的日志条目,然后使用ajax. 我仍然很ajax陌生,想知道是否有人可以向我解释return 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;
});
​
5个回答

我将在这里写的内容适用于jQuery 事件
对于 vanilla javascript 事件,请阅读答案底部的 @TJ Crowder 评论


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

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

return false相当于event.preventDefault()+event.stopPropagation()

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

也许你觉得这很有帮助:
停止事件冒泡 - 提高性能?


一个“真实”的演示讲解的区别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()-> 表单不会被提交,但事件冒泡到 div,触发它的提交处理程序。

现场演示

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

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

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

现场演示


return false在 vanilla javascript 事件什么

从 DOM2 处理程序 ( addEventListener)返回 false根本不做任何事情(既不阻止默认值也不停止冒泡;从 Microsoft DOM2-ish 处理程序 ( attachEvent) 中,它阻止默认值但不冒泡;从 DOM0 处理程序 ( onclick="return ...") 中,它阻止默认值(假设您在属性中包含返回值)但不冒泡;从 jQuery 事件处理程序中,它可以同时执行这两项操作,因为那是 jQuery 的事情。详细信息和现场测试在这里 – TJ Crowder

2021-03-29 10:31:01
@弗朗索瓦瓦尔。反过来......return false确实如此e.preventDefault(); + e.stopPropagation()所以如果你想要他们两个,只要return false.
2021-03-30 10:31:01
这是否意味着如果你有e.preventDefault();你不需要, return false;如果他们都做同样的事情?
2021-04-13 10:31:01
+1 用于回答实际问题,即使是事后的想法
2021-04-14 10:31:01
+1 是的,我正要写,stopPropagation但看到你已经提到了:)
2021-04-14 10:31:01

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

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

虽然它可能更好地使用 e.preventDefault();

抱歉,看来我错了。submit 事件确实会冒泡 - 似乎这仅在极少数情况下才有用。
2021-03-26 10:31:01
'在这种情况下' - 表单提交不会冒泡。
2021-04-09 10:31:01
你是对的,它阻止了默认操作,但它也阻止了冒泡。
2021-04-10 10:31:01

由于 ajax,您不希望以正常方式提交表单。所以你必须返回 false 以防止表单的默认行为。

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