2010-04-09 9 views
6

So che questa domanda esatta è stata richiesta here, ma la risposta non ha funzionato per quello che dovevo fare quindi ho pensato di dare qualche codice di esempio e spiegare un po '...come riattivare il default dopo aver fatto event.preventDefault()

$(document).keypress(
    function (event) { 
     // Pressing Up or Right: Advance to next video 
     if (event.keyCode == 40 || event.keyCode == 39) { 
      event.preventDefault(); 
      $(".current").next().click(); 
     } 
     // Pressing Down or Left: Back to previous video 
     else if (event.keyCode == 38 || event.keyCode == 37) { 
      event.preventDefault(); 
      $(".current").prev().click(); 
     } 
    } 
); 

disabilita fondamentalmente i tasti freccia per usarli per qualcosa d'altro, ma facendo:

$(document).keypress(function() { }); 

non consente ancora una volta la funzione di default ... ho bisogno di scorri la pagina senza dover creare una funzione di scorrimento per questo ...

Qualche idea?

Grazie,
Matt

+0

destra ... SRY ho avvolto il "qui" in un tag, ma ha dimenticato di includere il link. L'ho fatto ora, grazie per averlo fatto notare :) – Matt

+0

LOL, sai, quando l'ho letto ho pensato * che il fraseggio sembrava chiedere un link ... –

+0

possibile duplicato di [Come riattivare l'evento .preventDefault?] (http://stackoverflow.com/questions/1164132/how-to-reenable-event-preventdefault) –

risposta

3

Non sono sicuro che questo è il modo giusto per gestire la cosa.

Un modo migliore per affrontare questo problema sarebbe quello di mettere un qualche tipo di controllo dentro le istruzioni document.keypress .. come ..

var enableKeys = false; 

$(document).keypress(
    function (event) { 
     // Pressing Up or Right: Advance to next video 
     if (event.keyCode == 40 || event.keyCode == 39 && enableKeys) { 
      event.preventDefault(); 

      $(".current").next().click(); 
     } 
     // Pressing Down or Left: Back to previous video 
     else if (event.keyCode == 38 || event.keyCode == 37 && enableKeys) { 
      event.preventDefault(); 
      $(".current").prev().click(); 
     } 
    } 
); 

Poi controllare le enablekeys ovunque si sente necessario, sia con un hover o qualcosa del genere.

+0

+1 Non sono sicuro se questo è "un modo migliore", ma è sicuramente un'alternativa valida se, per qualsiasi ragione, [T.J.La soluzione di Crowder] (http://stackoverflow.com/questions/2608714/how-to-re-enable-default-after-doing-event-preventdefault/2608740#2608740) non è utilizzabile in alcune applicazioni. –

+0

Ha funzionato subito, suppongo che abbia aiutato a farlo corrispondere esattamente al mio codice. Grazie! – Matt

+0

Felice di aiutare :) – dmp

0

Perché non basta avvolgere una condizione intorno event.preventDefault(); nel codice attuale?

+0

Cosa intendi? In che modo contribuire a riattivare l'azione predefinita? – Matt

+0

Ignorerebbe "preventdefault()", vero? –

5

L'aggiunta di un nuovo gestore non sostituisce la precedente, ne aggiunge una nuova. Probabilmente stai cercando jQuery#unbind se stai cercando di rimuovere il gestore precedente, ma se hai intenzione di attivarlo e disattivarlo molto, probabilmente starai meglio con una bandiera che ti dice se impedire il default o non nel tuo gestore esistente.

Aggiunta, e più tardi la rimozione, un gestore di simile a questa:

function keypressHandler() { /* ... */}; 

$('#thingy').keypress(keypressHandler); 

// ...elsewhere... 
$('#thingy').unbind('keypress', keypressHandler); 
+0

La tua risposta sembrava essere un po 'più vicina al modo giusto per farlo, ma non riuscivo a farlo funzionare e Dan ha funzionato subito. – Matt

+0

@Matt: sono contento che sia stato risolto. In realtà, la risposta di danp è la stessa di quella di Diodeus, è solo un * lotto * più accuratamente descritto (che conta molto!). :-) –

0

Provare a unbind l'evento keypress dal documento.

Non conosco altri modi per farlo.

HTH

0
function(e){ e.preventDefault(); } 

e il contrario di

function(e){ return true; } 
Problemi correlati