Сбой jQuery live protectDefault для элементов ввода - PullRequest
2 голосов
/ 08 октября 2010

У меня есть следующий фрагмент кода:

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

где "#message input" - это, очевидно, группа элементов ввода текста. Я хочу поймать клавишу ввода и предотвратить обновление страницы. Однако, это терпит неудачу каждый раз. Предупреждение работает нормально, но, похоже, что protectDefault () не работает.

У кого-нибудь есть идеи?

Редактировать: Я должен был упомянуть, что я работаю в ASP.NET, и это внутри элемента формы. Удаление его из элемента формы решает проблему, но я хотел бы знать, почему не работает protectDefault ().

Ответы [ 5 ]

1 голос
/ 28 декабря 2011
$('#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;
}
1 голос
/ 08 октября 2010

По иронии судьбы, именно само оповещение вызывало проблему.

AFAICT, предупреждение остановит выполнение JavaScript до того, как может работать вступить в силу protectDefault (), но браузер продолжит обрабатывать нажатие клавиши, вызывая отправку формы.

Странно, но вот оно у вас.

1 голос
/ 08 октября 2010

Могу попробовать

e.stopPropagation()
0 голосов
/ 08 октября 2010

Я думаю, что формы отправляются keypress, а не keydown. Попробуйте

$('#messages input').live('keypress', function(e){
  if(e.keyCode == 13) {
    alert($(this).attr('value'));
    e.preventDefault();
    return false;
  }
});
0 голосов
/ 08 октября 2010

Насколько я знаю, обновление страницы - это функция по умолчанию формы, а не кнопки ввода, и поэтому вам следует запретить использование по умолчанию в форме, а не на вводе.

Что-то вроде строкиз:

$('#target').submit(function() {
  return false;
});
...