2014-06-16 42 views
7

Jakieś pomysły, dlaczego preventDefault nie działa? Oto poniższy kod. . . Tks!preventDefault() nie działa przy zmianie zdarzenia

<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 

    $(document).ready(function() { 
     $("#text1").change(function(e) { 
      e.preventDefault(); 
     }); 
    }); 

function myFunc() { 
    alert("Random, annoying alert"); 
} 

</script> 
</head> 

tylko jeden element w postaci HTML:

<body> 
<form name="test" method="post"> 
    <input name="text1" id="text1" type="text" onchange="myFunc();"> 
</form> 
</body> 
+2

Prawdopodobnie miałeś na myśli '$ (" # text1 ")' – blgt

+0

Masz kilka błędów w swoim przykładzie, na jakie domyślne oczekiwania faktycznie masz zamiar zapobiec? –

+0

Czy próbujesz zapobiec wyświetlaniu "Losowego, denerwującego alertu"? Zakładasz, że myFunc() jest domyślną próbą zapobiegania? –

Odpowiedz

12

Nie można używać preventDefault na imprezach zmian, ponieważ nie jest cancelable:

$("#text1").change(function(e) { 
    alert(e.cancelable?"Is cancelable":"Not cancelable"); 
}); 

Obiekt cancelable jest prawdziwe tylko na wydarzeniach, które można zapobiec.

+0

Wielkie dzięki. Czasami jest to najbardziej oczywiste i najbardziej problematyczne! – SlimJim

+4

Jak można temu zapobiec? – Triynko

0

preventDefault() ma być stosowany w celu zapobiegania domyślne zachowanie elementu, że domyślne zachowanie piecze się w przeglądarce.

Podobnie jak na przykład zachowanie znacznika zakotwiczenia po kliknięciu w celu zainicjowania sekwencji zdarzeń, które zmodyfikują pasek url i wyślą żądanie http (zbyt uproszczone wyjaśnienie, które znam).

Korzystając z evt.preventDefault(evt) wewnątrz zdarzenia kliknięcia, można zatrzymać domyślne zachowanie, aby można było wykonywać inne operacje przed rozpoczęciem działania lub zignorować je wszystkie razem.

Problem, który mogę zobaczyć na przykładzie, polega na tym, że domyślne zachowanie onchange polega na usunięciu zaznaczenia pola wejściowego, usunięciu jego podświetlenia i nie jestem pewien, czy jest to zdarzenie (jestem prawie pewien, że tak nie jest). Nie po to, aby móc zatrzymać przypisaną funkcję onchange(). Rzeczywiście, jeśli użyjesz preventDefault(), myFunc(), to dokładnie tam, gdzie powinno być.

Aby zapobiec wystąpieniu zdarzenia, musi istnieć wynikowy wynik, który nie jest modyfikowany. na przykład Kliknięcie znacznika, przesłanie formularza, przewijanie kontenera.