3

clickイベントをリンクにバインドする場合

$("linkSelector").click(function(){ ... });

そうすれば、ユーザーがリンクをクリックしなくても、このイベントハンドラーを簡単に強制的に実行することもできます。

$("linkSelector").click(function() { ... }).click();

しかし、私の場合は、イベントハンドラーをバインドできるイベントを持つjQueryスライダーウィジェットを使用しています。slideどうすればそのイベントをプログラムで強制的に実行できるのでしょうか。

私はフォローしようとしましたが、どれも機能しません:

$("sliderSelector").slider({ slide: function(){ ... } }).slide();
$("sliderSelector").slider({ slide: function(){ ... } }).slider("slide");
$("sliderSelector").slider({ slide: function(){ ... } }).trigger("slide");

匿名関数の代わりに名前付き関数を使用できることは知っていますが、slideイベントのトリガー中に任意の引数で関数を呼び出すことができるため、スライダーで設定された正しい値が提供されるため、解決策とは見なされません。

4

2 に答える 2

9

解決

これは、そのようなイベントハンドラーを実際にトリガーする結果のコードです。

var s = $("sliderSelector").slider({ slide: function(evt, ui){ ... } });
s.slider("option", "slide").call(s, null, { values: s.slider("values") });

イベントハンドラーで実際に使用する関数パラメーターを必ず指定してください。範囲スライダーを使用している場合はui.valuesパラメーターが必要なので、ハンドラーが壊れないようにそのようなオブジェクトを作成しています。

関数を複数回呼び出す必要があるため、これは良い解決策ではありませんが、マジック値.slider()の使用を防ぐ最も安全な方法です。

于 2011-05-24T13:47:08.490 に答える
2

非常によく似た問題が発生しました。

コールバックをイニシャライザーに入れる代わりに.bind()(またはjQueryのそれ以降のバージョンの場合)に登録すると、期待どおりにコールバックを呼び出すことができます。.on.trigger()

2種類のハンドラーは異なるようですが、どこにも文書化されていません。

于 2011-07-20T15:51:40.773 に答える