我有以下代码片段:
$('#messages input').live('keydown', function(e){
if(e.keyCode == 13) {
alert($(this).attr('value'));
e.preventDefault();
return false;
}
});
其中“#message input”显然是一组输入文本元素。我想抓住“输入”键并阻止它刷新页面。但是,它每次都失败了。警报工作正常,但似乎preventDefault()不起作用。
有人有什么想法吗?
编辑:我应该提到我正在使用ASP.NET,它位于表单元素中。从表单元素中删除它可以解决问题,但我想知道为什么preventDefault()不起作用。
答案 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;
});