W jQuery 1.4.2 występuje błąd, który powoduje, że zdarzenie change na elemencie select jest uruchamiane dwukrotnie podczas używania zdarzenia DOM i zdarzenia jQuery, a to tylko w IE7/8. Oto kod testu:Problem jQuery ze zdarzeniem change i IE8
<html>
<head>
<script src="http://code.jquery.com/jquery-1.4.2.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery(".myDropDown").change(function() {
});
});
</script>
</head>
<body>
<select class="myDropDown" onchange="alert('hello');">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
</body>
</html>
Aktualizacja: Inny widok problemu, faktycznie jest to prawdziwy problem mamy z naszej aplikacji. Wiązanie zdarzenia zmiany na żywo z selektorem, który nawet nie dotyka elementu select z zdarzeniem DOM, powoduje również podwójne strzelanie.
<html>
<head>
<script src="http://code.jquery.com/jquery-1.4.2.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery(".someSelectThatDoesNotExist").live("change", function() {
});
});
</script>
</head>
<body>
<select class="myDropDown" onchange="alert('hello');">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
</body>
</html>
Ticket to rzeczywisty błąd: http://dev.jquery.com/ticket/6593
To powoduje wiele kłopotów dla nas w naszej aplikacji przyczyny używamy zarówno asp.net-wydarzenia zmieszane z jQuery i po zahaczyć zdarzenie zmiany na każdym elemencie każde zaznaczenie (rozwijane) powoduje ten podwójny problem zwalniania.
Czy istnieje ktoś, kto zna sposób rozwiązania tego problemu w międzyczasie, dopóki ten problem nie zostanie rozwiązany?
Czy trzeba zdarzenie propagować? –
Niestety, jeśli potrzebujesz zachowania propagacji, itp. ... Nie sądzę, że jest to możliwe, jest to błąd 1.4.2 core/IE8, który będzie wymagał dodatkowego sprawdzenia w jQuery do naprawienia. –
@Nick: Co rozumiesz przez propagowanie? Chcę, aby działał tak jak inne przeglądarki, a wydarzenie jest uruchamiane tylko raz. – Marcus