2013-01-31 23 views
9

używałem jQuery live() funkcję wykryć, kiedy użytkownik został naciśnięcia kilku klawiszy specjalnych (strzałki, itp):Jquery funkcja żywo nagle nie działa już

$('.TextBox1').live('keydown', function(e) { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 40) { 
     e.preventDefault(); 
     // ... 
    } 
}); 

To działa dobrze przez kilka miesięcy, kiedy nagle wczoraj przestał działać, uniemożliwiając wykonywanie każdej linii kodu JS poniżej. Próbowałem zastąpić go funkcją .keyup, ale to nie pomogło. Co mogłoby się stać?

+0

Czy otrzymujesz błąd w konsoli? –

+3

Czy coś jeszcze się wydarzyło wczoraj? Założę się, że tak. – Jon

+3

[live()] (http://api.jquery.com/live/) jest przestarzały od wersji jQuery 1.7 i został usunięty w wersji 1.9. Zamiast tego użyj [on()] (http://api.jquery.com/on/). –

Odpowiedz

26

Zakładam, że zaktualizowany do najnowszej wersji jQuery? live() jest przestarzała od jQ1.7 i została usunięta z wersji 1.9.

Zamiast tego należy użyć on() z parametrem Delegat:

$(document).on('keydown', '.TextBox1', function(e) { 
    var keyCode = e.keyCode || e.which; 

    if (keyCode == 40) { 
     e.preventDefault(); 
     //... 
    } 
}); 

Zauważ, że dla uzyskania najlepszej wydajności należy wymienić document w powyższym przykładzie z najbliższego elementu nadrzędnego .TextBox1 który nie jest dynamicznie załączonym do DOM po załadowaniu strony.

+4

Uzyskując 7 odpowiedzi "prawie takie same", wybrałem to jako właściwe, ponieważ było to pierwsze. –

1

.live został usunięty w jQuery 1.9. Jeśli wywołujesz ostatnią wersję jQuery, to się zepsuje.

zmienić swój kod do korzystania .Na

0

Od wersji jQuery 1.7 metoda .live() jest przestarzała. Użyj .on(), aby dołączyć programy obsługi zdarzeń. Użytkownicy starszych wersji jQuery powinni używać .delegate() zamiast .live().

Przeczytaj to aby uzyskać więcej informacji o live

3

jQuery .live jest przestarzała. Chociaż nie jest to bezwzględnie takie same, należy .on() Dla Twojej przykład to będzie wyglądać:

$('body').on('keydown', '.TextBox1', function() { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 40) { 
     e.preventDefault(); 
     ... 
    } 
} 
0

żywo została rzeczywiście usunięta na JQ 1.9, nie tylko przestarzałe! możesz użyć wtyczek do kompatybilności lub zaktualizować swój kod do

2

.live() został usunięty w najnowszej wersji jQuery 1.9.

Zamiast tego można użyć jQuery Migrate plugin lub zmienić kod, aby użyć .on.

0

.live() przestarzałe w JQ 1.9 więc można spróbować tego

$('.TextBox1').on('keydown', function() { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 40) { 
     e.preventDefault(); 
     ... 
    } 
} 
+0

Dzięki za odpowiedź, chyba tylko ja nie wiedziałem o tym. XD –

0

Czy zaktualizowała jQuery 1.7?

Od wersji jQuery 1.7 metoda .live() jest przestarzała.

Zastosowanie .Na(), aby dołączyć obsługi zdarzeń:

$('.TextBox1').on('keydown', text_box_key_down_function); 

Można również użyć wiążą:

$('.TextBox1').bind('keydown',text_box_key_down_function); 
0

.live został usunięty podczas JQ 1.9 został wydany, więc myślę zaktualizowaniu Jquery do ostatniego.

Teraz, spróbuj:

$('.TextBox1').on('keydown', function() { 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 40) { 
     e.preventDefault(); 
     ... 
    } 
} 
3

.live() usunięto po jQuery 1.9.

Od teraz trzeba używać .on.

0

użyj tego, jak wspomniano na stronie jquery. dla przykładu będzie

$(document).on("keydown", ".TextBox1", function() { });

0

.live został usunięty podczas JQ 1.9 ale teraz nie jest rozwiązaniem dla biegu zarówno .live .Na i jednocześnie

<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script> 
<script src="http://code.jquery.com/jquery-1.11.1.js"></script> 

More about Jquery migrate

Feather information from stackoverflow