2011-01-31 8 views
1

私のページには、jQueryでバインドするhtml入力(type = text)があります。ユーザーが値を変更した後にEnterキーを押すかテキストボックスを終了すると、(ajaxを使用して)送信します。jQueryを使用して「入力」と「変更」をOR結合することは可能ですか?

jQueryが提供しないので、私は "enter"イベントを作成しました。私は実際にここから投稿しました。 (「提出オンに変更入る-か - 」を持つ任意のクラス)

$(document.body).delegate(":input","keyup",function(e){ 
    if(e.which == 13) 
     $(this).trigger("enter"); 
}); 

そして、私のバインディングはそうのように行われます:

$('.submit-on-enter-or-on-change').bind("enter change",function(){ 
    submitValue(this); 
)}; 

問題がときであることは、このようになりますユーザーが 'Enter'キーを押して値が変更された場合、submitValue(this)が2回呼び出されます。

これを防ぐ方法はありますか?一度に1つの提出は私のために十分です:)

+0

変更が既に呼び出されている可能性はありますか?フォームを使用している場合、変更が頻繁に呼び出される可能性があります。 Ex:テキストエリアでEnterキーを押すと、 'change'が呼び出され、' enter'も呼び出されます。 – Marnix

+0

@Marnix - 問題は変更ISが呼び出されることです。私は変更が呼び出されたときに 'enter'トリガを防ぎたい。ユーザーがenterを押すと、IEはonchangeイベントを呼び出しません。 – Darcy

+0

ぼかしイベントにバインドできませんでしたか?テキストボックスを離れるとき... – Marnix

答えて

0

さて、私の問題への修正が単に結合「を入力してください」とだけ「変更」を使用を削除することでした。

明らかに、IEはhtmlでインラインで使用するときに変更に「入力」キーを受け入れませんが、jQuery経由でバインドすると機能します。

すなわち

<input type="text" onchange="submitValue(this)" /> 

は、入力したキーに提出していません。

0

この作品のようなものですか?

0

回避策の1つは、debounce submitValue呼び出しです。

0

bind()メソッドのオプションの3番目のパラメータは、(falseの場合)イベントがバブリングを停止する(したがって、ハンドラが2回呼び出されない)ブール値です。それはあなたが必要とするものですか?

さらに詳しい情報:http://api.jquery.com/bind/

+0

それは動作しません。 jQueryは、この場合は関数ハンドラの代わりに 'return false;'を渡します – Darcy

関連する問題