2014-06-16 12 views
7

Irgendwelche Ideen, warum preventDefault nicht funktioniert? Hier ist der Code unten. . . Tks!preventDefault() funktioniert nicht für Änderungsereignis

<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> 

Nur ein HTML-Element in der Form:

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

Wahrscheinlich meinten Sie '$ (" # text1 ")' – blgt

+0

Sie haben ein paar Fehler in Ihrem Beispiel, welchen Standard erwarten Sie eigentlich zu verhindern? –

+0

Möchten Sie verhindern, dass die Meldung "Random, nervous alert" angezeigt wird? Gehen Sie davon aus, dass myFunc() der Standardwert ist, den Sie verhindern möchten? –

Antwort

12

Sie können nicht preventDefault auf Änderungsereignisse verwenden, da es nicht stornierbar ist:

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

Die cancelable Eigenschaft true ist nur auf Ereignisse, die verhindert werden kann.

+0

Vielen Dank. Manchmal ist es das Offensichtlichste, was am problematischsten ist! – SlimJim

+4

Also wie kann es verhindert werden? – Triynko

0

preventDefault() verwendet werden soll, um das Standardverhalten eines Elements zu verhindern, dass das Standardverhalten ist in Ihrem Browser gebacken.

Wie zum Beispiel das Verhalten eines Anchor-Tags, wenn geklickt wird, ist eine Sequenz von Ereignissen zu initiieren, die die URL-Leiste ändern und eine http-Anfrage senden (allzu einfache Erklärung, die ich weiß).

Durch die Verwendung von evt.preventDefault(evt) innerhalb eines Klickereignisses können Sie das Standardverhalten anhalten, damit Sie andere Aktionen ausführen können, bevor Sie das Verhalten ausführen, oder sie alle zusammen ignorieren.

Das Problem, das ich mit Ihrem Beispiel sehe, ist, dass das Standardverhalten von onchange ist, das Eingabefeld zu deaktivieren, heben Sie es hervor und ich bin nicht sicher, dass es als ein Ereignis eingestuft wird (ich bin ziemlich sicher, dass es nicht ist). Nicht um eine Funktion zu stoppen, die Sie angehängt haben onchange(). Infact, wenn Sie eine preventDefault() verwenden sollten, ist myFunc() genau dort, wo es sein sollte.

Damit ein Ereignis verhindert werden kann, muss eine resultierende Ausgabe vorhanden sein, die über das Aussehen hinausgeht. z.B. Das Klicken eines a-Tags, das Senden eines Formulars, das Scrollen eines Containers.

Verwandte Themen