2011-12-16 9 views
2

私はこの単純なコードをここに持っています。 event.preventDefault not working

$("input#send").submit(function(event){ 
     event.preventDefault(); 
    $.ajax({ 
     type: 'POST', 
     url: add.php, 
     data: data, 
     success: success, 
     dataType: dataType 
    }); 
}); 

はWhever私は event.preventDefault機能が動作しない、「送信」ボタンをクリックすると、ページがロードされます。

なぜでしょうか?

答えて

9

フォーム提出イベント、ないボタンがあります。さらに、IDは一意である必要がありますので、tag#idはちょうど#idになります。

$("#theform").submit(function(event) { 
    event.preventDefault(); 
    // ... 
}); 
+0

ありがとう、それは働いた。以前ボタンのクリック機能を使用していましたが、そのように動作していないようですか?何故ですか? –

+0

@Peter Stuart:あなたはどういう意味ですか?'submit'ボタンに' click'を置くこともできます:http://jsfiddle.net/rKJJU/。 – pimvdb

+2

@PeterStuart私は、あなたが 'add.php'の周りに引用符を入れていなかったからだと思う。以下の私の答えを見てください。キーボードから 'enter'キーを使ってフォーム提出を呼び出すことができるので、@ pimvdbがフォームハンドラをフォーム自体に置くことについてのアドバイスに同意します。 – jessegavin

0

偽リターンを使用してみてください代わりに

$("input#send").submit(function(event) { 
    $.ajax({ 
     type: 'POST', 
     url: add.php, 
     data: data, 
     success: success, 
     dataType: dataType 
    }); 
    return false; 
}); 
+2

違いはありません。 –

+1

jQueryイベントハンドラで 'return false'は' event.preventDefault();を呼び出すのと同じです。 event.stopPropagation(); ' – Jasper

+1

私はそれを試していました、それはajaxのために動作しませんでした。それは私がAjaxコードの上に置くとうまくいった。とにかくありがとう:) –

2

私が提出したイベントがフォーム要素のためであると考えています。 input [type = 'button']の場合は、clickイベントを使用します。

7

あなたは、フォームのsubmitイベントやボタンのclickイベントに結合し、あなたが提出からフォームを停止する場合event.preventDefault()を呼び出す必要があります:

$('form').bind('submit', function (event) { 
    event.preventDefault(); 
}); 

$('form').find(':submit').bind('click', function (event) { 
    event.preventDefault(); 
}); 
1
  1. 'add.php'
  2. 変更の前後に引用符を追加します。セレクタをinput#sendを含むフォームのid属性に設定します。

入力上のフォームではなく、clickハンドラにsubmit()ハンドラを扱うことの利点は、いくつかの形式は(ユーザーがフォームフィールドの一つに焦点を当てている)Enterキーを押すことにより提出することができるということです。 id属性がない場合は、フォームタグを追加するか、別のjQueryセレクタを使用してフォームタグをターゲットにします。

$("#myform").submit(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     type: 'POST', 
     url: 'add.php', 
     data: data, 
     success: success, 
     dataType: dataType 
    }); 
    return false; 
}); 
0

preventDefaultを使用している場合は、デフォルトの送信アクションが必要ないと考えられます。私は単に.submitを使用する代わりに、別のイベントを使用します。私にとっては、あなたが傍受したい送信アクションではなく、通常は送信を引き起こすクリックです。 return falseevent.stopPropagation()の両方が動作しない

$('#inputSend').on('click', function(event) { 
    event.preventDefault(); 
    //the rest 
}); 
0

場合は、以下の方法を試してみてください。 .on()を使用すると、送信機能がアクセス可能になります。 .submit().on("submit"..)に変更した後は、return falseまたはe.stopPropagation()のいずれかを使用できます。

$(document).on("submit", "input#send", function(event) { 
    event.stopPropagation(); 
    $.ajax({ 
     type: 'POST', 
     url: add.php, 
     data: data, 
     success: success, 
     dataType: dataType 
    }); 
    return false; });