Pregunta

Tengo el siguiente fragmento de código:

$('#messages input').live('keydown', function(e){
  if(e.keyCode == 13) {
    alert($(this).attr('value'));
    e.preventDefault();
    return false;
  }
});

donde "entrada #message" es, obviamente, un grupo de elementos de texto de entrada. Quiero atrapar la tecla "enter" y evitar que actualizar la página. Sin embargo, no todo el tiempo. La alerta funciona bien, pero parece que el preventDefault () no está funcionando.

Alguien tiene alguna idea?

Editar debería haber mencionado que estoy trabajando en ASP.NET, y es dentro de un elemento de formulario. Retirarlo de los elementos de formulario resuelve el problema, pero me gustaría saber por qué preventDefault () no está funcionando.

¿Fue útil?

Solución 2

Irónicamente, fue la propia alerta de que estaba causando el problema.

AFAICT, la alerta podría detener la ejecución de JavaScript antes de la preventDefault () podría entrar en vigor, pero el navegador continuación de la tramitación del golpe de teclado, lo que provocó un envío del formulario.

Extraño, pero ahí lo tienen.

Otros consejos

Puede probar un

e.stopPropagation()
$('#form_deal_step1').live('submit',function(){
        $('.column .column_child select').not(':hidden').each(function(ev){
             if($(this).val()=='?')
             {
                 alert('Please select the ages of each child.');
                 ev.preventDefault();
                 return false;
             }
          });
})
var age_selected=1;
$('.column .column_child select').not(':hidden').each(function(){
    if($(this).val()=='?')
    {                
        age_selected=0; 
    }
});
if(age_selected==0)
{
    alert('Please select the ages of each child.');
    return false;
}

Creo que las formas se presentarán en keypress, no en keydown. Trate

$('#messages input').live('keypress', function(e){
  if(e.keyCode == 13) {
    alert($(this).attr('value'));
    e.preventDefault();
    return false;
  }
});

Por lo que yo soy consciente de la actualización de la página es una función por defecto de no la forma del botón de entrada y, como tal, debe estar impidiendo por defecto en la forma en lugar de la entrada.

Algo a lo largo de las líneas de:

$('#target').submit(function() {
  return false;
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top