2014-06-16 8 views
7

Qualche idea sul perché preventDefault non funziona? Ecco il codice qui sotto. . . Tks!preventDefault() non funziona per l'evento di modifica

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

solo un elemento HTML nella forma:

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

Probabilmente intendevi '$ (" # text1 ")' – blgt

+0

Hai qualche errore nel tuo esempio, quali sono le impostazioni predefinite che prevedi di prevenire? –

+0

Stai cercando di impedire la visualizzazione di "Avviso casuale e fastidioso"? Stai supponendo che myFunc() sia l'impostazione predefinita che stai cercando di impedire? –

risposta

12

Non è possibile utilizzare preventDefault su eventi di modifica, perché non è annullabile:

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

La proprietà cancelable è vero solo su eventi che possono essere prevenute.

+0

Molte grazie. A volte è la cosa più ovvia che è la più problematica! – SlimJim

+4

Quindi, come può essere prevenuto? – Triynko

0

preventDefault() deve essere usato per prevenire il comportamento predefinito di un elemento, che il comportamento di default è cotto al tuo browser.

Come per esempio il comportamento di un tag di ancoraggio quando si fa clic per avviare una sequenza di eventi che modificherà la barra dell'URL e invierà una richiesta http (spiegazione eccessivamente semplicistica lo so).

Utilizzando evt.preventDefault(evt) all'interno di un evento click è possibile interrompere il comportamento predefinito in modo da poter eseguire altre operazioni prima di eseguire il comportamento o ignorarlo tutto insieme.

Il problema che posso vedere con il tuo esempio è che il comportamento predefinito di onchange consiste nel deselezionare la casella di input, non evidenziandola e non sono sicuro che sia classificata come evento (sono abbastanza sicuro che non lo sia). Non perché sia ​​in grado di interrompere una funzione che hai allegato onchange(). Infatti, se si dovesse utilizzare un preventDefault(), myFunc() è esattamente dove dovrebbe essere.

Per un evento da prevenire, deve esserci un'uscita risultante, qualcosa oltre l'aspetto della modifica. per esempio. Il clic di un tag, l'invio di un modulo, lo scorrimento di un contenitore.

Problemi correlati