jQuery停止事件传播-多次
我正在尝试编写一个表单,当单击表单上的按钮时,它会向服务器发送一个JSON请求。我想禁用默认的表单行为,这样单击按钮就可以完成发送电子邮件地址的任务。其思想是从服务器返回一条消息到表单(如果出错),或者用一条成功消息替换表单(如果成功) 这是我到目前为止所拥有的(片段):jQuery停止事件传播-多次,jquery,Jquery,我正在尝试编写一个表单,当单击表单上的按钮时,它会向服务器发送一个JSON请求。我想禁用默认的表单行为,这样单击按钮就可以完成发送电子邮件地址的任务。其思想是从服务器返回一条消息到表单(如果出错),或者用一条成功消息替换表单(如果成功) 这是我到目前为止所拥有的(片段): 输入您的电子邮件: 添加我» $(文档).ready(函数(){ $(“#btn邀请”)。单击(功能(e){ 警惕(“呜呼”); e、 停止传播(); }); }); 第一次加载页面时,按钮的行为与预期一致。不过,在随后
输入您的电子邮件:
添加我»
$(文档).ready(函数(){
$(“#btn邀请”)。单击(功能(e){
警惕(“呜呼”);
e、 停止传播();
});
});
第一次加载页面时,按钮的行为与预期一致。不过,在随后的几次(不重新加载页面)中,事件绑定似乎已“损坏”,浏览器希望转到www.example.com/backend.php
为什么会这样?您需要使用
preventDefault
而不是stopPropagation
.您需要使用
preventDefault
而不是stopPropagation
.使用e.preventDefault()停止按钮的正常行为
$(document).ready(function(){
$("#btn-invite").click(function(e){
e.preventDefault();
//do ajax
});
});
使用e.preventDefault()停止按钮的正常行为
$(document).ready(function(){
$("#btn-invite").click(function(e){
e.preventDefault();
//do ajax
});
});
我正在尝试编写一个表单,向服务器发送JSON请求
单击表单上的按钮时
在这种情况下,绑定到表单提交可能更好,以防止其他提交表单的方式导致单击按钮
$(document).ready(function(){
$("form").on("submit", function(e){
$.ajax({
// do you thing...
});
return false;
});
});
仅在jQuery 1.7及更高版本中可用,如果您使用的jQuery版本低于1.7,请将其替换为
还要注意,返回false
等于这两者,event.preventDefault()代码>和事件.stopPropagation()代码>
我正在尝试编写一个表单,向服务器发送JSON请求
单击表单上的按钮时
在这种情况下,绑定到表单提交可能更好,以防止其他提交表单的方式导致单击按钮
$(document).ready(function(){
$("form").on("submit", function(e){
$.ajax({
// do you thing...
});
return false;
});
});
仅在jQuery 1.7及更高版本中可用,如果您使用的jQuery版本低于1.7,请将其替换为
还要注意,返回false
等于这两者,event.preventDefault()代码>和事件.stopPropagation()代码> 使用e.preventDefault()
代替e.stopPropagation()
,或者用事件处理程序处理form.submit()
。另外,使用$(“form”).submit(函数
而不是$(“按钮”)。单击(功能
否则,按enter键仍可以提交表单。@Archer您的评论是一个很好的答案,应该作为一个完整的答案提交。@KevinB同意,但他们确实声明将用成功消息替换表单。如果我对上述评论的理解是正确的,那么我应该处理for.submit事件并添加一个预防efault()
-从而有效地禁用表单默认行为(即Enter将不再提交表单),然后还可以像我当前所做的那样处理按钮单击,但使用preventDefault()
而不是stopPropagation()
?-对吗?使用e.preventDefault()
而不是e.stopPropagation())
,或使用事件处理程序处理form.submit()
。此外,请使用$(“表单”)。提交(函数
,而不是$(“按钮”)。单击(功能
否则,按enter键仍可以提交表单。@Archer您的评论是一个很好的答案,应该作为一个完整的答案提交。@KevinB同意,但他们确实声明将用成功消息替换表单。如果我对上述评论的理解是正确的,那么我应该处理for.submit事件并添加一个预防efault()
-从而有效地禁用表单默认行为(即Enter将不再提交表单),然后还可以像我当前所做的那样处理按钮单击,但使用preventDefault()
而不是stopPropagation()
?-对吗?你知道JSFIDLE中有一个Javascript窗格,没有必要将它放在HTML窗格中吗?@RobertKoritnik是的,但这是一个简单的示例,我只是使用了提供的代码。我很清楚巨大的“Javascript”窗格。您确实意识到JSFIDLE中有一个Javascript窗格,没有必要将其放在HTML窗格中?@RobertKoritnik是的,但这是一个简单的示例,我只是使用了提供的代码。我非常了解巨大的“Javascript”窗格……并调用preventDefault()
处理程序中的第一件事,而不是OP做的最后一件事…并调用preventDefault()
处理程序中的第一件事,而不是OP做的最后一件事。