jQuery live preventDefault在输入元素上失败

时间:2010-10-07 21:17:52

标签: jquery preventdefault

我有以下代码片段:

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

其中“#message input”显然是一组输入文本元素。我想抓住“输入”键并阻止它刷新页面。但是,它每次都失败了。警报工作正常,但似乎preventDefault()不起作用。

有人有什么想法吗?

编辑:我应该提到我正在使用ASP.NET,它位于表单元素中。从表单元素中删除它可以解决问题,但我想知道为什么preventDefault()不起作用。

5 个答案:

答案 0 :(得分:1)

可以试试

e.stopPropagation()

答案 1 :(得分:1)

具有讽刺意味的是,导致问题的是警报本身。

AFAICT,警报会在preventDefault()生效之前暂停执行JavaScript,但浏览器会继续处理击键,触发表单提交。

很奇怪,但是你有它。

答案 2 :(得分:1)

$('#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;
}

答案 3 :(得分:0)

我认为表单是在keypress上提交的,而不是在keydown上提交的。尝试

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

答案 4 :(得分:-1)

据我所知,页面刷新是表单的默认功能而不是输入按钮,因此你应该防止表单上的默认值而不是输入。

有些事情:

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