2013-03-20 16 views
21

Potrzebuję wywołać niestandardowe zdarzenie w wywołaniu zwrotnym połączenia trigger, ale nie mogę go uruchomić.Jak uruchomić funkcję zwrotną w wyzwalaczu jQuery ("kliknij")?

Próbowałem to:

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

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

a to:

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

z których żaden nie działa.

Pytanie:
Jak mogę funkcją oddzwaniania do uruchomienia kiedy jestem wyzwalanie kliknięcie na element?

+1

Czemu dodanie niezdefiniowane jako drugi parametr do uruchomienia? Co powinien zrobić ten drugi parametr? Czy dezorientujesz wyzwalacz i bind? –

+0

To jest moja próba funkcji zwrotnej ...Próbowałem także owijać go w '[]' jak w [jquery API] (http://api.jquery.com/trigger/), ale też nie działa – frequent

+1

'.trigger' nie przyjmuje żadnych wywołań zwrotnych. '$ input.trigger ('kliknięcie')' wyzwala zdarzenie 'click' na elementach' $ input', tzn. wykona procedury obsługi zdarzeń 'click' związane z tymi elementami. Wygląda na to, że powiążesz 'runtest' z' $ input', ale nie jestem pewien, czego dokładnie chcesz. –

Odpowiedz

21

Po wywołaniu trigger, związana obsługa zdarzeń jest natychmiast wykonywana, więc nie potrzebujesz żadnego wywołania zwrotnego. Wystarczy użyć

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

+1 To powinno działać dobrze, zgodnie z dokumentami: http://qunitjs.com/cookbook/#testing-user-actions. –

+0

do zrobienia. Dzięki – frequent

+1

@ Często zdarzają się problemy z obsługą wywołań i programów obsługi. Jeśli nie ma asynchronicznej aktywności związanej z akcją, jest to program obsługi, który * uruchamiasz *, natomiast jeśli jest aktywność asynchroniczna, przypisujesz * wywołanie zwrotne *, aby obsłużyć odpowiedź, gdy się pojawi (lub według statusu). –

4

Trigger nie ma funkcji zwrotnej.

.trigger(eventType [, extraParameters ]) 

Official Document

Co można zrobić

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

$input.on('click',function(){ 
    console.log("clicked the input"); 
}); 
+0

@dystroy przepraszam, edytowałem moją odpowiedź ... –

+0

ok. Dzięki za wytłumaczenie. – frequent

0

Trigger nie posiada funkcji zwrotnej - można lepiej ponownie napisać kod do korzystania z metody .on .

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

JSFiddle.

11

Najpierw należy powiązać zdarzenie click, a następnie wywołać zdarzenie click.

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

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

$input.trigger('click'); 
+0

tak. to jeden sposób. Dzięki. – frequent

+2

Użyj '.on()' zamiast '.bind()'. – Simon

2

Trzeba użyć bind lub on dodać zwrotnych. W Twoim przypadku powinno to wyglądać tak:

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

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

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

Jeszcze krótsza wersja do wiązania kliknięcie jest $input.click(runtests)

to będzie nazywane po kliknięciu lub można go wywołać ręcznie z $input.trigger('click') lub po prostu $input.click().

0

Jeśli masz obsługi kliknąć na każdym wejściu, ale chce zrobić coś na konkretnym elemencie:

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'); 
8

Tak - Prawdą jest, że spust nie bierze zwrotnego ale możemy przekazać wywołanie zwrotne jako parametr.

//.trigger(eventType [, extraParameters ]) 

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

nadzieję, że to pomaga

+2

Jeśli już znasz konwencję przypisywania funkcji wywołania zwrotnego podczas definiowania powiązanego zdarzenia dla elementu DOM, ta odpowiedź faktycznie informuje, w jaki sposób można faktycznie przekazać funkcję dynamicznego wywołania zwrotnego w momencie uruchomienia zdarzenia. To sprawia, że ​​jest to jedna z najcenniejszych odpowiedzi na tej stronie, dla mnie. – tobylaroni

+0

Zgadzam się z @tobylaroni. Nie wiem, dlaczego nie była to zaakceptowana odpowiedź! Prawdopodobnie pytanie dotyczyło "wyzwalacza", a nie niestandardowego. – Rahatur

Powiązane problemy