2013-03-12 74 views
1

我有一个按钮,提交表格preventDefault()不适用于委托目标?

该按钮已在页面上。

所以,如果我想阻止提交,我可以这样做:

$(".myBtn").on('click',function (e){ e.preventDefault();.....});

但如果按钮即将在未来被注入,我可以这样做:

$("body").on('click',".myBtn",function (e){ e.preventDefault();.....});

但它不工作,并提交表单。

如果处理程序没有直接连接到元素本身,而是连接到委托对象,我该如何实现我的目标?

+0

也许尝试使用表单元素上的提交事件。 – 2013-03-12 13:58:36

+1

这应该没什么区别,如果你把一个断点放在你的点击处理程序中,可能不会被调用。你100%肯定这个班是'myBtn'吗? – 2013-03-12 14:00:30

+0

@ClaudioRedi正面。当我执行“live ver 1.9”语法时,它不起作用 – 2013-03-12 14:01:25

回答

1

您不应该将点击处理程序附加到提交按钮,以防止提交表单。始终绑定表单的“提交”事件 - 如果用户按下提交表单而不是点击提交表单,该怎么办?

$(document).on('submit','#your-form',function(e) { 
e.preventDefault(); 
}); 

至于回答你的直接问题,你的代码应该工作正常。确保您的按钮具有合适的类名,并确保在您单击可能导致e.preventDefault()被忽略的按钮之前或之后,页面上不会出现JS错误。

+0

这不起作用。委托提交事件不可取消。这显然是jQuery中的一个错误。当你点击e.preventDefault调用时,表单已经发布到服务器。当你直接绑定到表单元素本身时,情况并非如此。 – Triynko 2015-11-18 20:56:07