私はちょうど別のブラウザでこの動作をテストした、すべてのブラウザは、同じ結果を与えた、ここに私の結論です:
<!-- submit button inside form -->
<form method="post">
<input type="submit" value="submit" /> <!-- onclick = submitted to same page -->
<input type="submit" value="submitNredirect" onclick="document.location.href='http://www.google.com';" /> <!-- onclick = submitted to same page, ignored redirect -->
</form>
<!-- submit button without form -->
<input type="submit" value="submit" /> <!-- onclick = no submit or redirect occur -->
<input type="submit" value="submitNredirect" onclick="document.location.href='http://www.google.com';" /> <!-- onclick = redirect -->
ご存知のように、JavaScriptを線形であり、それは最初に来るのコードの行を実行します。我々は、このフォームを持っているとしましょう:
<form id="myform" method="post" onsubmit="alert('onsubmit');">
<input id="mybtn" type="submit" value="submit" onclick="alert('onclick');" />
</form>
<script>
$(document).ready(function() {
$('#mybtn').bind('click', function() {
alert('bind click');
});
$('#myform').bind('submit', function() {
alert('bind submit');
});
// onclick > bind click > onsubmit > bind submit
});
</script>
ボタンをクリックすると、ボタンにバインドされたイベントが(イベントを「クリック」)最初に発生し、その後、フォームにバインドされたイベントには、次の(「送信」イベントを発生します)。 結果は以下の通りです:
- 警告:onclickの
- 警告:バインドクリック
- 警告:をonSubmit
- 警告:あなたが含まれている場合、バインドが
- フォーム送信
を提出します関数のリダイレクトコードはリダイレクトされずに送信されますが、私はjavascriptがを上書きすると信じていますフォームのポストプロセスでは、 "フォームの提出"は暗黙の/暗黙のコード行のようにスクリプトの最後にあります。return false;
を指定しないと、この暗黙的/隠線が実行されます。
私は専門家ではありませんが、それは私がいくつかのテストの後で理解したものです。私が間違っているなら、私を修正してください。
編集:各機能にdocument.location.href
を含めるとどうなりますか?
<form id="myform" method="post" onsubmit="document.location.href='http://www.onsumbit.com';">
<input id="mybtn" type="submit" value="submit" onclick="document.location.href='http://www.onclick.com';" />
</form>
<script>
$(document).ready(function() {
$('#mybtn').bind('click', function() {
document.location.href='http://www.bindclick.com';
return false;
});
$('#myform').bind('submit', function() {
document.location.href='http://www.bindsumbit.com';
});
});
</script>
「HREF」変更の文字列値の状態は以下の(しかし、スクリプトの終了時にリダイレクトを実行する)ように:
- document.location.href =「http://www.onclick.com」このような;
- document.location.href = 'http://www.bindclick.com';
- document.location.href = 'http://www.onsubmit.com';
- document.location.href = 'http://www.bindsubmit.com';
- document.location.href = '/'; //フォーム投稿
- javascriptの、「HREF」文字列値
に基づいてリダイレクトんが、我々はあなたが観察しているもの「http://www.bindclick.com」
[フォームのSubmit jQueryでデフォルトにならない](http://stackoverflow.com/q/6462143/11683)と[event.preventDefault()とfalse falseを返す](http://stackoverflow.com/q/)を参照してください。 1357118/11683)。 – GSerg
私はfalseを返しても送信が妨げられ、その場合はリダイレクトが発生することはわかっています。しかし、なぜリダイレクトはこの場合には起こりませんか?それを止めるのは何ですか? – GendoIkari
[jsfiddle](http://jsfiddle.net/)でこれを再現し、テストしているブラウザを教えてください。 –