2013-08-29 19 views
8
<script> 
    $(document).ready(function(){ 
    //Load City by State 
    $('#billing_state_id').live('change', function() { 
     //do something 
    }); 
    $('#click_me').live('click', function() { 
     //do something 
     //need to recall $('#billing_state_id').live('change', function() { but how? 
    }); 
    }); 
</script> 

obciążenia Miasto przez państwa działa dobrze, ale nie wiem, czy to możliwe, czy nie nazwać go w innej funkcji jak $('#click_me').live('click', function().jak wywołać funkcję z innej funkcji w jQuery

+1

'.live' jest przestarzałe, użyj' on' (sprawdź na stronie podręcznika, jest bardzo opisowy, ponadto jQuery jest po prostu JavaScript .. Wywołujesz funkcję podobną do jakiejkolwiek innej z JS –

+1

Proponuję użyć funkcji on() przeciwko live(). Ponieważ transmisja na żywo jest przestarzała. –

+0

Cóż, postanowiłem przywrócić moją odpowiedź. Rzeczywiście, nie wiem, dlaczego powinienem być fair play, a inni nie. Ponadto na ten temat jest zbyt wiele pochopnych notatek i nie widzę ku temu żadnego dobrego powodu. – leaf

Odpowiedz

9

Zakładam, że nie chcesz ponownie wiązać zdarzenia, ale zadzwoń do obsługi.

Można użyć trigger() aby wyzwalać zdarzenia:

$('#billing_state_id').trigger('change'); 

Jeśli handler nie zależy od kontekstu zdarzeń i nie chcesz, aby wywołać inne procedury obsługi dla zdarzenia, można również wymienić funkcję :

function someFunction() { 
    //do stuff 
} 

$(document).ready(function(){ 
    //Load City by State 
    $('#billing_state_id').live('change', someFunction); 
    $('#click_me').live('click', function() { 
     //do something 
     someFunction(); 
    }); 
    }); 

Należy również pamiętać, że live() jest przestarzała, on() to nowa gorąca.

+0

. Lepszym rozwiązaniem jest po prostu wykonanie funkcji o nazwie, a nie anonimowości. Spowoduje to również uruchomienie wszystkich pozostałych modułów obsługi dołączonych do zdarzenia. –

+0

To zależy od intencji. może musi wywołać inne procedury dołączone do wydarzenia. –

+0

Jest to możliwe, ale nie wydaje się, co OP próbuje zrobić z jego opisu w pytaniu. –

2

okład ty wspólny kod do innej funkcji:

<script> 
    function myFun() { 
     //do something 
    } 

    $(document).ready(function(){ 
    //Load City by State 
    $(document).on('change', '#billing_state_id', function() { 
     myFun(); 
    }); 
    $(document).on('click', '#click_me', function() { 
     //do something 
     myFun(); 
    }); 
    }); 
</script> 
+1

Dlaczego owijacie funkcję inną funkcją? Możesz po prostu zrobić 'click', myFun);' zwróć też uwagę, że '.live' jest przestarzałe. –

+2

@BenjaminGruenbaum: to czystszy projekt. Wyraźne wywoływanie procedury obsługi zdarzeń (zamiast oczekiwania na wysłanie do niej zdarzeń) zdecydowanie wskazuje na pewną funkcjonalność wykraczającą poza przetwarzanie interakcji użytkownika ("logika biznesowa", jeśli chcesz tak powiedzieć) i niezależnie od semantyki zdarzenia. ta część kodu powinna zatem zostać wyodrębniona, po prostu wyobraź sobie późniejsze dodatki większej ilości przetwarzania do obsługi zdarzeń "zmień", która jest specyficzna dla tego zdarzenia. bezpośrednie wywoływanie procedury obsługi z innych części kodu spowoduje złamanie aplikacji w sposób trudny do wykrycia. – collapsar

+0

Myślę, że pomieszałeś to, co próbowałem powiedzieć Nie znaczyłem, że powinieneś użyć '.click()' lub '.change()', aby wywołać zdarzenie ręcznie (Zobacz mój komentarz na innym answeR). To, o czym mówiłem, to pisanie 'myFun' zamiast' function() {myFun()} 'ponieważ' myFun' jest _already_ jest funkcją i owijacie ją w innym (anonimowe wyrażenie funkcji) z powodu, który jest poza mną:) Drugą rzeczą, którą powiedziałem, jest to, że '.live' jest przestarzałe (ponieważ jQuery 1.7, jeśli dobrze pamiętam) i nie powinno być używane w nowym kodzie. '.on' powinno być preferowane. –

0

myślę, że w tym przypadku, gdy chcesz coś takiego:

$(window).resize(resize=function resize(){ some code...} 

Teraz u mogą dzwonić resize() w niektórych innych funkcji zagnieżdżonych:

$(window).scroll(function(){ resize();} 
Powiązane problemy