2012-05-23 10 views
17

データベースに保存されたログエントリをユーザーが入力してから、ajaxを使用してページに取得して印刷できるWebページを作成しました。私はまだ全く新しいajaxになっていて、誰かが私に説明してくれればいいのかと疑問に思っていましたreturn false;は私のコードの最後に何をしていますか?それは必要なのでしょうか?「falseを返す」とは何ですか?行う?

return falseの後ろに2番目の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; 
}); 
​ 
+0

デフォルトのフォーム送信動作を停止します。 –

+0

@ダゴン。それだけではありません。 – gdoron

答えて

35

私がここに書くつもりはjQueryのイベントについても同様です
T.J @読みバニラjavascriptのイベントのために。コールバックの内側答え


return falseの下部にクラウダーコメントは、デフォルトの動作を防止します。たとえば、submitイベントでは、フォームは送信されません。

return falseも、バブリングを停止するので、要素の親は、発生したイベントを知らないでしょう。

return falseevent.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()、提出されdiv、送信ハンドラをトリガします。

Live DEMO

さて、フォームが提出の場合ハンドラはreturn falseでバブリングをキャンセルします:

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

div要素もフォームの送信があったか分からないでしょう。return falseはjavascriptのイベントバニラでDOM2ハンドラ(addEventListener)から偽

リターンをするのかどう

Live DEMO


は全く何もしない(どちらもデフォルトを防止したりバブリングを停止します。 Microsoft DOM2-ishハンドラ(attachEvent)からは、デフォルトのバブルは行われませんが、DOM0ハンドラ(onclick="return ...")からは、デフォルト(戻り値を属性に含めるが、バブリングは含まない)。 jQueryのイベントハンドラから、それはjQueryのものなので、両方を行います。詳細とライブテストはこちら - T.J. Crowder

+1

実際の質問に答えるのに+1、 –

+0

+1ええ、私は 'stopPropagation'について書こうとしていましたが、あなたが既にそれを見たのを見ました:) – VisioN

+0

' e.preventDefault() ; 'もし両方が同じことをするならば、あなたは' false false;を返す必要はありませんか? – Nope

2

この場合、return false;は、デフォルトアクション(送信するフォーム)を防止します。

それはあなたが通常の方法で提出するフォームをしないため、Ajaxをe.preventDefault();

+0

あなたはデフォルト動作を防ぐのは間違いありませんが、バブリングも停止します。 – gdoron

+0

'このインスタンスでは' - フォーム提出はバブルしません。 – ahren

+0

あなたはどうしてそんなに思いますか? – gdoron

0

を使用するように、おそらくより良いですが。したがって、フォームのデフォルト動作を防ぐためにfalseを返す必要があります。

3

関数内のreturnステートメントの後のコードは決して実行されません。関数の実行を停止し、この関数の戻り値を渡します(この場合はfalse)。あなたの関数は、イベントコールバックを「サブミット」しています。このコールバックがfalseを返す場合、フォームは実際には送信されません。それ以外の場合は、JavaScriptなしの場合と同じように提出されます。