我有以下代码段:

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

其中“ #message输入”显然是一组输入文本元素。我想捕获“ Enter”键,并防止其刷新页面。但是,它每次都失败了。该警报正常工作,但是看来预防违规()不起作用。

有人有想法么?

编辑: 我应该提到我正在ASP.NET中工作,并且它在表单元素内部。将其从表单元素中删除可以解决问题,但是我想知道为什么DestrestDefault()不起作用。

有帮助吗?

解决方案 2

具有讽刺意味的是,正是警报本身引起了问题。

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

很奇怪,但是你有。

其他提示

可能会尝试

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

我认为表格已提交 keypress, , 不开 keydown. 。尝试

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

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

与:

$('#target').submit(function() {
  return false;
});
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top