Domanda

Ho il seguente frammento di codice:

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

dove "input #message" è ovviamente un gruppo di elementi di testo di input. Voglio prendere il tasto "invio" e impedirgli di aggiornare la pagina. Tuttavia, non riesce ogni volta. L'allarme funziona bene, ma sembra che la preventDefault () non funziona.

Qualcuno ha qualche idea?

Modifica Avrei detto che sto lavorando in ASP.NET, ed è all'interno di un elemento del modulo. Rimuoverlo dal risolve elemento forma il problema, ma mi piacerebbe sapere perché preventDefault () non funziona.

È stato utile?

Soluzione 2

Per ironia della sorte, è stato l'allarme in sé che è stata la causa del problema.

AFAICT, l'avviso dovrebbe fermare l'esecuzione JavaScript prima della preventDefault () potrebbe entrare in vigore, ma il browser continua elaborazione della sequenza di tasti, innescando un invio di un modulo.

Strano, ma il gioco è fatto.

Altri suggerimenti

Potrebbe provare 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;
}

Credo che le forme sono presentate su keypress, non su keydown. Prova

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

Per quanto io sappia il refresh della pagina è una funzione predefinita del modulo non è il pulsante di ingresso e come tale si dovrebbe essere impedendo di default sulla forma piuttosto che l'ingresso.

Qualcosa sulla falsariga di:

$('#target').submit(function() {
  return false;
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top