2

jQueryの送信機能について質問があります。

職場環境はこちら

jQuery: 1.7.2、クローム (18.0.1025.168 m)。

2つの問題があります。

1位:

このような私のコード

html

<form id="test" action="..." method="post">
     <input type="text" />
     <input type="submit">
</form>

jQuery

$('#test').submit(function(){
      return false;
})

問題は、Firefox と Opera では正常に動作しますが、Chrome では正常に動作することです。

2位:

html:上記の通り。

jQuery:

$('#test').submit(function(){
      if(...)
         alert(something..);
      return false;
})

firefox、opera、chrome では動作しません。それは常にform.submitの理由を引き起こします。

私はそれを非常に混乱させます。誰がそれを理解できますか ありがとう!

4

4 に答える 4

11

使用しないでくださいreturn false;。代わりにこれを試してください:

$('#test').submit(function(event){
      event.preventDefault();
});
于 2012-05-13T14:08:34.797 に答える
4

交換:

$('#test').submit(function(){
      return false;
});

と:

$('form#test').submit(function(event){    
      event.preventDefault();
});
于 2012-05-13T14:08:47.673 に答える
3

ページを送信したくない場合は、簡単に使用できます

onsubmit="return false"または、あなたが持っているコードでも可能な条件付き提出が必要な場合。

これには何の問題もありません

デモ

コード:

$('#test').submit(function(event) {
    if(jQuery('#textbox').val() == '') {
       alert('Not submitting');
       //event.preventDefault(); Not necessary but better
       return false;
    }
})
于 2012-05-13T14:12:29.980 に答える
1

これは、送信ハンドラーの動作と競合する JS ライブラリまたはカスタム コードの結果である場合があります (たとえば、フォームを明示的に送信する別の送信ハンドラーがある場合)。

理想的な解決策は、競合するコードをデバッグして見つけて解決することです。

ただし、回避策として、フォームの送信ハンドラーの代わりに、送信ボタンのクリック ハンドラーを使用するように変更できます。

次のようなことができます。

    <input type="submit" id="btnSubmit">    

次に、コードで行うことができます

$('#btnSubmit').click(function(){ //Actually we can do 'input[type="submit"]'
    return false;
})

ただし、「Enter」キーを押してフォームを送信できる場合は注意が必要です。この場合、クリック ハンドラの呼び出しは、ブラウザに依存したり、使用中のライブラリに基づいたりする可能性があります。onsubmit="のコメントを参照してください。 return false" は、詳細については Dirk Paessler の回答でInternet Explorer 7/8 (フォームは引き続き送信されます) には影響しません。

ただし、ブラウザーに依存しないようにするために、次のコードのように、「Enter」キーを押すボタンもキャッチする場合があります。

document.onkeypress = function(evt) {
   var evt = (evt) ? evt : ((event) ? event : null);
   var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
   if ((evt.keyCode == 13) && (node.type == "text")) { 
         /*return true or false here based on your logic*/;
   }
}

ただし、e.preventDefault() を直接呼び出すなど、このスレッドで他の提案を試すこともできますが、これは Jquery が実際に舞台裏で行っていることですが、競合するコードが問題ない可能性があります。

于 2013-04-22T22:00:16.763 に答える