0

テキストボックスがあり、live() に keyup イベントを使用しています- 新しいコードを書く人は on() を使用する必要があります -しかし問題は、値をコピーして貼り付けたり、値をドラッグしたり、オートコンプリートを使用して値を変更したりできることでした。

この問題を解決するために、次を使用できることがわかりました。

$(".textbox").live("keyup change input", function(){

これは機能しますが、問題は明らかに、特定のケースや特定のブラウザーで関数が複数回呼び出されることです。この問題を回避する方法が思い浮かびません。誰か簡単なアイデアはありますか?ページ上のいくつかの値を更新するだけなので、コードが複数回呼び出されても世界の終わりではありませんが、この問題を解決する方法を学ぶことは素晴らしいことです! ありがとう!

編集:前に言及するのを忘れていましたが、jQuery 1.4.4 を使用しており、on() は使用できません。

4

2 に答える 2

0

提案と修正

この関数$.live()は非推奨です。したがって、次のコードを変更します。

$(".textbox").live("keyup change input", function(){

に:

$("body").unbind("keyup").unbind("change").unbind("input").on("keyup change input", ".textbox", function(){

これにより、イベントの複数の添付が解決されます。

于 2013-01-31T08:55:08.597 に答える
0

複数のイベントが発生しても値が変更されていない場合は、それらのイベントを無視できます。したがって、古い値を維持し、新しい値と比較して、何かを行う必要があるかどうかを判断できます。

$(".textbox").live("keyup change input", function(e){
    if($(this).attr("old-value") !== $(this).val()){
        // do something

        // update old-value
        $(this).attr("old-value", $(this).val());
    }
});

デモはこちら: http://jsfiddle.net/NYmYJ/3/

于 2013-01-31T08:58:27.023 に答える