32

呼び出しのコールバックでカスタムイベントをトリガーする必要がありますが、triggerそれを機能させることができません。

私はこれを試しました:

var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);

function runtests () {
    console.log("clicked the input");
};
$input.trigger('click', runtests()); 

この:

var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);
$input.trigger('click', function(){
    console.log("clicked the input");
}

どちらも機能しません。

質問:
要素のクリックをトリガーするときにコールバック関数を実行するにはどうすればよいですか?

4

10 に答える 10

28

を呼び出すtriggerと、バインドされたイベント ハンドラーがすぐに実行されるため、コールバックは必要ありません。使うだけ

$input.trigger('click');
runtests();
于 2013-03-20T09:21:03.643 に答える
25

はい - 確かにトリガーはコールバックを取りませんが、コールバックをパラメーターとして渡すことができます。

//.trigger( eventType [, extraParameters ] )

$("#element").bind("customCall", function(e, callback){
   callback();
}
var callback = function(){alert("Hello");}
$("#element").trigger("customCall",[callback]);

これが役立つことを願っています

于 2015-12-18T03:27:44.767 に答える
12

最初にクリックイベントをバインドする必要があり、次にクリックイベントをトリガーできます。

$input.bind('click', function() {

     console.log("clicked the input");
});

$input.trigger('click');
于 2013-03-20T09:20:28.880 に答える
5

トリガーにはコールバック機能がありません。

.trigger( eventType [, extraParameters ] )

Official Document

できること

var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);

$input.on('click',function(){
   console.log("clicked the input");
});
于 2013-03-20T09:18:48.170 に答える
2

bindコールバックを使用またはon追加する必要があります。あなたの場合、それはこのように見えるはずです:

var $input = $( ".ui-popup-container" ).find( "input" ).eq(2);

function runtests () {
    console.log("clicked the input");
};

$input.bind('click', runtests);

クリックをバインドするためのさらに短いバージョンは$input.click(runtests)

次に、クリックで呼び出されるか、またはを使用して手動でトリガーでき$input.trigger('click')ます$input.click()

于 2013-03-20T09:20:44.807 に答える
0

トリガーにはコールバック関数がありません。.onメソッドを使用するようにコードを書き直す方がよいでしょう。

$("body").on("click", "#click", function() {
   alert("Clicked!"); 
});

JSFiddle

于 2013-03-20T09:20:26.890 に答える
0

すべての入力にクリック ハンドラーがあるが、特定の要素で何かをしたい場合:

var $container = $(".ui-popup-container"),
    special = 2;

$container.on('click', 'input', function() {
    // do something for every input

    if($(this).index() == special) {
        // your "callback", e.g. the function you want to execute on input:eq2 click
        myfunction();
    }
}).find('input').eq(special).trigger('click');
于 2013-03-20T09:44:56.040 に答える
0

.trigger()コールバックは受け付けません。バインドされたイベント ハンドラーはすぐに実行されるため、ほとんどの場合は必要ありません。ただし、トリガー イベント ハンドラーに AJAX 呼び出しがある場合、受け入れられた回答のコードは機能しません。

$input.trigger('click');
runtests();

setTimeout()次のように使用する必要があります。

$input.trigger('click');
setTimeout(function () {
    runtests();
}, 250);

または、イベント ハンドラーの呼び出しにsuccessまたはerrorコールバックを使用することを検討してください。.ajax().trigger()

于 2020-04-02T18:58:34.263 に答える