Что делает «return false»? do?

17

Я написал веб-страницу, где пользователь может ввести запись журнала, которая хранится в базе данных, а затем извлекается и печатается на странице с использованием 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;
});
​
    
задан Dmitri 24.05.2012 в 01:19
источник

4 ответа

35

То, что я напишу здесь, верно для событий jQuery ,
Для ванильных событий javascript читайте @ T.J. Комментарий Crowder в нижней части ответа

return false внутри обратного вызова предотвращает поведение по умолчанию. Например, в событии submit он не отправляет форму.

return false также останавливает барботирование, поэтому родители элемента не будут знать, что произошло событие.

return false эквивалентно event.preventDefault() + event.stopPropagation()

И, конечно, весь код, который существует после строки return xxx , не будет выполнен. (как и во всех языках программирования, которые я знаю)

Возможно, вы сочтете это полезным:
Стоп-событие пузыря - увеличивает производительность?

A "real" , чтобы объяснить разницу между return false и event.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();
});​

Теперь ... когда пользователь отправляет форму, первым обработчиком является форма submit, которая preventDefault() - & gt; форма не будет отправлена, но событие пузырится в div, вызывая его обработчик отправки.

Live DEMO

Теперь, если обработчик формы submit отменит буксование с 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 в ванили

  

return false из обработчика DOM2 ( addEventListener ) ничего не делает (не предотвращает по умолчанию и не останавливает пузырьки; из обработчика Microsoft DOM2-ish ( attachEvent ) он предотвращает дефолт, но не пузырится, из DOM0 обработчик ( onclick="return ..." ), он предотвращает по умолчанию (при условии, что вы включаете возврат в атрибут), но не пузырящийся, из обработчика события jQuery он выполняет оба действия, потому что это вещь jQuery. Подробности и тесты в реальном времени здесь - TJ Crowder

    
ответ дан gdoron 24.05.2012 в 01:21
источник
3

Любой код после оператора return в функции никогда не будет выполнен. Он прекращает выполнение функции и возвращает это возвращаемое значение функции ( false в этом случае). Ваша функция - отправить запрос события. Если этот обратный вызов возвращает false , форма не будет отправлена ​​на самом деле. В противном случае он будет представлен, как и без JavaScript.

    
ответ дан Pavel Strakhov 24.05.2012 в 01:24
источник
2

В этом случае return false; предотвращает действие по умолчанию (которое является отправкой формы).

Хотя, вероятно, лучше использовать e.preventDefault();

    
ответ дан ahren 24.05.2012 в 01:22
источник
0

из-за ajax у вас нет вашей формы, которая будет отправлена ​​обычным способом. Поэтому вам нужно вернуть false, чтобы предотвратить поведение формы по умолчанию.     

ответ дан pbaris 24.05.2012 в 01:22
источник