2010-04-09 17 views
6

Sé que esta pregunta fue hecha here, pero la respuesta no funcionó para lo que necesitaba hacer, así que pensé en dar un ejemplo de código y explicar un poco ...cómo volver a habilitar el valor predeterminado después de hacer 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(); 
     } 
    } 
); 

básicamente, desactiva las teclas de flecha para usarlos para otra cosa, pero hacerlo:

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

no permite de nuevo la función por defecto ... lo necesito a desplazarse por la página sin tener que crear una función de desplazamiento para ...

¿Alguna idea?

Gracias,
Matt

+0

derecha ... sry me envolvió el "aquí" en una etiqueta, pero se olvidó de incluir el enlace. Lo he hecho ahora, gracias por señalar eso :) – Matt

+0

LOL, ya sabes, cuando lo leí pensé que * el fraseo parecía que mendigaba un enlace ... –

+0

posible duplicado de [Cómo volver a habilitar el evento .preventDefault?] (http://stackoverflow.com/questions/1164132/how-to-reenable-event-preventdefault) –

Respuesta

3

No estoy seguro de que esta es la manera correcta de manejar la situación.

Una mejor manera de abordar este problema sería poner algún tipo de verificación dentro de sus instrucciones document.keypress .. como ..

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(); 
     } 
    } 
); 

Entonces controlar los enablekeys donde quiera que se siente necesario, ya sea con un vuelo estacionario , O algo por el estilo.

+0

+1 No estoy seguro si esto es "una mejor manera", pero definitivamente es una alternativa viable si, por alguna razón, [T.J.La solución de Crowder] (http://stackoverflow.com/questions/2608714/how-to-re-enable-default-after-doing-event-preventdefault/2608740#2608740) no se puede usar en algunas aplicaciones. –

+0

Funcionó de inmediato, supongo que ayudó a que coincidiera exactamente con mi código. ¡Gracias! – Matt

+0

Me alegra ayudar :) – dmp

0

¿Por qué no envuelva alrededor de una condición event.preventDefault(); en el código actual?

+0

¿Qué quieres decir? ¿Cómo ayudaría eso a volver a habilitar la acción predeterminada? – Matt

+0

Omitiría "prevenirdefault()", ¿no es así? –

5

Agregar un nuevo controlador no reemplaza al anterior, agrega uno nuevo. Es posible que esté buscando jQuery#unbind si está tratando de eliminar el controlador anterior, pero si va a encenderlo y apagarlo con frecuencia, probablemente sea mejor con una bandera que le diga si debe evitar el valor predeterminado o no en su controlador actual.

Añadir, y luego retirar, un controlador es el siguiente:

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

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

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

Tu respuesta parecía estar un poco más cerca de la forma correcta de hacerlo, pero no pude hacer que funcionara y Danp trabajó de inmediato. – Matt

+0

@Matt: Me alegro de que haya sido resuelto. En realidad, la respuesta de Danp es la misma que la anterior de Diodeus, es simplemente * mucho * más detallada (¡que cuenta mucho!). :-) –

0

Pruebe unbind el evento de presionar tecla del documento.

No conozco ninguna otra forma de hacerlo.

HTH

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

y su opuesto

function(e){ return true; } 
Cuestiones relacionadas