0

私はjQuery UI Multiselect Next http://quasipartikel.at/multiselect_nextを持っています。選択が何らかの方法で変更されるたびにイベントを発生させたいと思います。

この例は機能します:

<script type="text/javascript">

$(function(){
$("#countries").multiselect();          
$('#countries').multiselect({ selected: function(event, ui) {change(); } });
$('#countries').multiselect({ deselected: function(event, ui) {change(); } });
});         

function change(){
alert('CHANGE');
}

</script>

リストから要素を移動すると、関数 change() が呼び出されます。主な問題は、関数が何度も呼び出されるため(要素の数)、「すべて削除」または「すべて追加」を押したときです。

「すべて削除」または「すべて追加」を押したときに、関数 change()を一度だけ呼び出すことはできますか?

ありがとう。

4

3 に答える 3

1

私は解決策を見つけました:

ui.multiselect.js を開く

次の行を selectAll 関数に追加します。

this.element.trigger('change');

次の行を selectNone function { に追加します

this.element.trigger('change');

次の行を stop 関数に追加します

that.element.trigger('change');

HTML:

<script type="text/javascript">
    $(function(){       
        $("#countries").multiselect();          
        $('#countries').bind('change', function() {alert('Change'); });
        });
</script>
于 2012-09-14T09:49:27.780 に答える
0

ある種のタイミング スキームを使用して、余分な呼び出しを除外できます。実際の人間が、選択または選択解除されたイベントを 100 ミリ秒ごとに 1 回以上トリガーできないと仮定してみましょう。次のことができます。

var lastChange = 0;

function change() {

  //get current date, then the number of milliseconds since 1/1/1970
  var curr_date = new Date();
  var n = cur_date.getTime();

  //compute the difference.
  var diff = n - lastChange;

  //update our last change variable.
  lastChange = n;

  //if we're within 100 milliseconds of the last call, ignore.
  if (diff < 100)
     return;

  //proceed as normal.
  alert('change!');
}

ニーズに合わせてこのようなアルゴリズムを微調整できます。例として 100 ミリ秒を使用しています。基本的にUIコントロール自体からのイベントをフィルタリングしようとしているので、これを行うためのよりクリーンな方法があるかどうかはわかりません。

于 2012-09-13T11:46:05.817 に答える
0

私はわかりません。しかし、あなたはjquery.one()を試します

$("#foo").one("click", function() {
  alert("This will be displayed only once.");
});
于 2012-09-13T11:43:03.887 に答える