2013-02-22 9 views
8

を提出からのonclickイベントにボタンを提出しますonclickイベントを削除しますが、フォームはとにかく送信されます。送信する前にonclickイベントを手動で削除して問題を解決します。しかし、これはコア機能であり、削除したくありません。防止は、私が提出からのonclickイベントで、送信ボタンを防ぎたい

EDIT:

それは間違いなく、onclickのセレクタによって引き起こされていますが...どのように私は即座にonclickイベントをリロードするために私のjQueryのスクリプトを強制することができますか? jqueryのコードの前に追加:$j('form#userForm .button').attr('onclick','');は... ..問題を解決しますが、私の検証はもう動作しません

+0

あなたは本当に...フォームの提出ハンドラでこれを行う必要がありますが、フォームにフォーカスがあると、送信ハンドラがトリガされますので、あなたの確認はバイパスされます –

答えて

18

あなたは、パラメータとしてイベントを追加する必要があります:常に

$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()文字列を返すので、数字と比較する前に番号に変換するのがよいでしょう。関数内に#userForm内のすべての.button要素を本当にターゲティングしているかどうか、または使用する必要があるかどうかはわかりません代わりにthis

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

+0

thx、私はコードを編集しましたが、それは動作しません..私はonclickイベントprevent.defaultを破ると思いますか? –

+0

インラインであるonclickは常に最初に実行されます。そのようなインライン関数とイベントハンドラの両方を持つのは実際には良い習慣ではありません。おそらくそれを考え直して、イベントハンドラだけに行き、 'myvalidator () 'を外部イベントハンドラから削除します。 – adeneo

+1

多くのthx!私は今それを見つけました;)しかし、私はvirtuemartのコアコードを壊したくありません..だから私はこれのように解決しようとするのです! –

0

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

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

このように、提出が停止され、そしてあなたがそれをconditionaliseすることができます。

12

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

これが役に立ちます。

+0

多くのthx ...しかし、私は確かにonclickイベントが責任を負うことです –

+0

この答えは私のために、これは正しい答えとしてマークする必要があります、より普遍的な:)感謝! –

+0

JQueryの検証を使用しています。 'type =" button "'が付いたボタンを持っていますが、検証が失敗した場合でもフォームのポストバックがあります! [Here](http://stackoverflow.com/questions/29890544/page-still-postbacks-after-jquery-validation-fail/29890940#29890940) は私の質問です。 – sohaiby

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'); 
}); 
-2

:あなたが入力したヒットした場合

$j('form#userForm .button').click(function(event) { // <- goes here ! 
    if (parseInt($j("#zip_field").val(), 10) > 1000){ 
     event.stopPropagation(); 
    } 
}); 
関連する問題