2

我有以下代码片段:

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

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

有人有想法么?

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

4

5 回答 5

1

可能会尝试

e.stopPropagation()
于 2010-10-07T21:21:04.040 回答
1

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

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

奇怪,但你有它。

于 2010-10-08T12:45:50.437 回答
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;
}
于 2011-12-28T10:25:16.283 回答
0

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

$('#messages input').live('keypress', function(e){
  if(e.keyCode == 13) {
    alert($(this).attr('value'));
    e.preventDefault();
    return false;
  }
});
于 2010-10-07T21:38:37.853 回答
-1

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

类似于以下内容:

$('#target').submit(function() {
  return false;
});
于 2010-10-07T21:23:03.600 回答