18

onclickイベントのある送信ボタンが送信されないようにしたい:

$j('form#userForm .button').click(function(e) {
    if ($j("#zip_field").val() > 1000){
        $j('form#userForm .button').attr('onclick','').unbind('click');
        alert('Sorry we leveren alleen inomstreken hijen!');
        e.preventDefault();
        return false;
    }
});

これは送信ボタンです:

<button class="button vm-button-correct" type="submit"
 onclick="javascript:return myValidator(userForm, 'savecartuser');">Opslaan</button>

「アラート」機能が表示され、onclickイベントも削除されますが、フォームはとにかく送信されます。送信する前にonclickイベントを手動で削除すると、問題が解決します。ただし、これはのコア機能であり、削除したくありません。

編集:

これは間違いなくonclickセレクターが原因です。jQueryスクリプトにonclickイベントを即座にリロードさせるにはどうすればよいですか?jqueryコードの前に追加する:$j('form#userForm .button').attr('onclick','');問題を解決します..しかし、私の検証はもう機能しません...

4

5 に答える 5

32

イベントをパラメータとして追加する必要があります。

$j('form#userForm .button').click(function(event) { // <- goes here !
    if ( parseInt($j("#zip_field").val(), 10) > 1000){
        event.preventDefault();
        $j('form#userForm .button').attr('onclick','').unbind('click');
        alert('Sorry we leveren alleen inomstreken hijen!');
    }   
});

また、val()常に文字列を返すため、数値と比較する前に数値に変換することをお勧めします。関数内のすべての.button要素を実際にターゲットにしているのか、それとも必要なのかはわかりません。代わりに#userForm使用しますか?this

jQuery 1.7以降を使用している場合は、これを使用することを検討する必要がありon()ますoff()

于 2013-02-22T15:16:59.710 に答える
18

基本的に、ボタンの種類をからtype="submit"に変更するとtype="button"、そのようなボタンはフォームを送信せず、回避策は必要ありません。

お役に立てれば。

于 2013-02-22T15:28:13.793 に答える
4

関数/イベント引数があることを忘れないでください。ただし、パラメーターを指定する必要があります。

$("#thing").click(function(e) {
  e.preventDefault();
});

このようにして、送信が停止されるため、条件付きで送信できます。

于 2013-02-22T15:18:15.880 に答える
0

最善の方法は、フォームの送信イベントハンドラー内ですべてを実行することです。インラインonclickを削除し、送信機能内で実行します

$j('#userForm').submit(function(e) {
    if (+$j("#zip_field").val() > 1000){
        alert('Sorry we leveren alleen inomstreken hijen!');
        return false;
    }
    return myValidator(userForm, 'savecartuser');
});
于 2013-02-22T16:28:39.557 に答える
-2

もっと簡単な方法があると思います:

$j('form#userForm .button').click(function(event) { // <- goes here !
    if ( parseInt($j("#zip_field").val(), 10) > 1000){
        event.stopPropagation();
    }   
});
于 2015-04-29T18:27:24.153 に答える