web-dev-qa-db-ja.com

jQuery trigger( "click")でコールバック関数を実行する方法は?

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");
}

どちらも機能しません。

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

28
frequent

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

$input.trigger('click');
runtests();
24
Denys Séguret

はい-トリガーがコールバックを受け取らないのは事実ですが、パラメーターとしてコールバックを渡すことができます。

//.trigger( eventType [, extraParameters ] )

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

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

18
Naren Chejara

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

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

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

$input.trigger('click');
11
Mahesh Sapkal

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

.trigger( eventType [, extraParameters ] )

Official Document

できること

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

$input.on('click',function(){
   console.log("clicked the input");
});
5
Dipesh Parmar

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()を使用して手動でトリガーできます。

2
FVlad

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

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

JSFiddle

0
MarcoK

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

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');
0
Simon