2012-05-23 20 views
17

Ho scritto una pagina Web in cui un utente può immettere una voce di registro memorizzata in un database e quindi recuperata e stampata sulla pagina utilizzando ajax. Sono ancora abbastanza nuovo per ajax e mi chiedevo se qualcuno potesse spiegarmi che cosa fa return false; alla fine del mio codice? ed è anche necessario?Cosa significa "return false;" fare?

Se inserisco il secondo codice Ajax dopo il return false il codice non funziona! puoi spiegarmi perché?

//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

interrompe il comportamento di invio modulo predefinito –

+0

@Dagon. Non solo quello. – gdoron

risposta

35

Quello che scriverò qui vale per eventi jQuery,
Per vaniglia javascript eventi leggono @ T.J. Crowder commento in fondo della risposta


return false all'interno di un callback impedisce il comportamento predefinito. Ad esempio, in un evento submit, non invia il modulo.

return false blocca anche, quindi i genitori dell'elemento non sapranno che l'evento si è verificato.

return false è equivalente a event.preventDefault() + event.stopPropagation()

E naturalmente, tutto il codice esistente dopo non verrà eseguita la linea return xxx. (Come con tutti i linguaggi di programmazione ne so)

Forse è risultato utile:
Stop event bubbling - increases performance?


un "vero" demo per spiegare la differenza tra return false e event.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(); 
});​ 

Ora ... quando l'utente inviare il modulo, il primo gestore è la forma presentare, che preventDefault() -> il modulo non sarà presentato, ma l'evento bolle a il div, attivando il suo gestore di invio.

Live DEMO

Ora, se il modulo di presentare gestore sarebbe annullare la spumeggiante con return false:

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

Il div non sarebbe nemmeno che ci fosse un invio di un modulo.

Live DEMO


Cosa return false fare vaniglia javascript eventi

return false da un gestore DOM2 (addEventListener) non fa nulla (né impedisce il default né ferma spumeggiante; da un gestore Microsoft DOM2-ish (attachEvent), impedisce il default ma non fa bolle: da un gestore DOM0 (onclick="return ..."), impedisce il default (a patto di includere il reso nell'attributo) ma non gorgogliare; da un gestore di eventi jQuery, lo fa entrambi, perché è una cosa jQuery. Dettagli e prove dal vivo qui - T.J. Crowder

+1

+1 per rispondere alla domanda vera e propria, anche se in un secondo momento –

+0

+1 Sì, stavo per scrivere su stopPropagation ma ho visto che lo hai già menzionato :) – VisioN

+0

Significa che se si ha 'e.preventDefault() ; 'non è necessario' return false; 'se entrambi fanno la stessa cosa? – Nope

2

In questo caso, return false; impedisce l'azione di default (che è la forma dell'invio).

Anche se è probabilmente meglio utilizzare e.preventDefault();

+0

Hai ragione previene l'azione predefinita, ma interrompe anche il bubbling. – gdoron

+0

"In questa istanza" - l'invio del modulo non sarebbe in bolla. – ahren

+0

Perché la pensi così? – gdoron

0

a causa di Ajax non lo fai il modulo da presentare con il modo normale. Quindi devi restituire false per impedire il comportamento predefinito del modulo.

3

Qualsiasi codice successivo all'istruzione return in una funzione non verrà mai eseguito. Interrompe l'esecuzione della funzione e fa passare a questa funzione il valore restituito (false in questo caso). La tua funzione è "invia" callback dell'evento. Se questa richiamata restituisce false, il modulo non verrà inviato in realtà. In caso contrario, verrà inviato come farebbe senza JavaScript.

Problemi correlati