Javascript 防止onclick着火
我正在处理html格式的表单提交。请看下面的代码Javascript 防止onclick着火,javascript,jquery,Javascript,Jquery,我正在处理html格式的表单提交。请看下面的代码 <form id="form1"> <button id="btn1" onclick="clicked();">Submit</button> </form> <script> $("#btn1").click(function (event) { alert("event triggered"); if(some_condition == t
<form id="form1">
<button id="btn1" onclick="clicked();">Submit</button>
</form>
<script>
$("#btn1").click(function (event) {
alert("event triggered");
if(some_condition == true){
// stop firing onclick method but it always submits the form
event.stopImmediatePropogation(); // not working
event.preventDefault(); // not working
event.stopPropogation(); // not working it's for bubbled events
}
});
function clicked(){ alert("clicked me"); }
</script>
提交
$(“#btn1”)。单击(函数(事件){
警报(“事件触发”);
if(某些条件==true){
//停止激发onclick方法,但它始终提交表单
event.stopImmediateProporation();//不工作
event.preventDefault();//不工作
event.stopPropogation();//不工作它用于冒泡事件
}
});
函数clicked(){alert(“clicked me”);}
我想停止
clicked()
函数的激发,该函数附加到内联onclick
属性。我想运行jquery click函数,如果出现问题,我不想触发onclick,但它总是运行clicked()函数。谁能帮我一下吗。非常感谢您的帮助 尝试event.stopPropagation()
相对于动态附加的处理程序,调用
onxyz
处理程序的顺序因浏览器而异,因此处理程序可能不会在原始处理程序运行之前运行
要处理此问题,请保存并删除onclick
处理程序:
var btn = $("#btn1");
var clickHandler = btn[0].onclick;
btn[0].onclick = false;
然后,在处理程序中,如果希望调用该函数,可以调用它:
clickhandler.call(this, event);
例如:
//获取按钮
风险值btn=$(“#btn1”);
//保存并删除onclick处理程序
var clickHandler=btn[0]。onclick;
btn[0]。onclick=false;
//把你的接线员接上
$(“#btn1”)。单击(函数(事件){
警报(“事件触发”);
如果(!确认(“允许?”){
//不允许,不要叫它
警惕(“停止”);
}否则{
//允许,叫它
clickHandler.call(此,事件);
}
});
//onclick处理程序
函数单击(){
警惕(“点击我”);
}
提交
如果条件为真,则删除“onclick”属性
if (some_condition == true) {
$("#btn1").removeAttr('onclick').click(function(event) {
alert("event triggered");
//do something
});
}
function clicked() {
alert("clicked me");
}
我正在分享一个快速解决方案,但不知道为什么不能添加逻辑来停止添加“onclick=”clicked();“您所说的代码将自动添加 我建议您隐藏id为“btn1”的按钮。添加样式显示:无。您不需要启用就绪功能,只需将样式属性添加到按钮btn1,或者如果这也不可能,则直接使用jQuery完成发布文档就绪。 阅读: 然后使用id为“btn2”的jQuery向表单添加一个新按钮,并添加注册btn2点击事件。在表单加载后执行此操作
<form id="form1">
<div id="newbut">
<button id="btn1" onclick="clicked();">Submit</button>
</div>
</form>
jQuery("#newbut").html('<button id="btn2">Submit</button>');
$(document).on('click', '#btn2', function(){
// Your Code
});
提交
jQuery(“#newbut”).html('Submit');
$(文档).on('click','#btn2',function(){
//你的代码
});
请参阅下面的url以了解如何注册“新建”按钮的单击事件:
您不能在一个函数中执行条件检查和单击()逻辑吗
<script>
function clicked() {
if(some_condition == true){
return;
}
alert("clicked me");
}
</script>
函数已单击(){
if(某些条件==true){
返回;
}
警惕(“点击我”);
}
它将不起作用,它适用于冒泡事件,而不适用于同一元素您注册了两个侦听器。OP已尝试了stopImmediateProposition()
,它将完成所有操作stopProposition()
does和more.onclick不是一个监听器,它附加了一个处理程序,唯一的方法是设置为onclick=null;但是如何在不设置为null的情况下停止从事件监听器触发内联事件要求是内联的“onclick”事件,必须在那里有它的要求。clicked()onclick
属性中的函数首先运行?如果使用jQuery,为什么还要有一个内联的onclick
属性?使用绑定两个处理程序。单击()
函数,并且您首先绑定的任何一个都可以调用stopImmediateProposition()
,以阻止第二个处理程序运行。(或将它们合并到一个处理程序中。)@nnnnnn抱歉,但“onclick”是自动生成的代码,我们无法删除onclick事件,如果我们想附加事件,请通过jquery添加它们,但我们无法在任何时候删除onclick并注意“onclick”"事件处理程序最后运行stopPropogation
是一个输入错误,它应该是stopPropogation
正确的。或者,更好的是,转储内联onclick
处理程序并使用单个函数,或者使用jQuery绑定两个函数。@nnnnnnnn:的确。我假设这是因为某种原因而无法更改的代码被添加到某个对象中(令人惊讶的是,有这么多这样的问题。)是的,OP在回答我在问题下的评论时确认了这一点。我也这么想,但我认为是否有任何解决办法,但我相信这会造成额外的开销,包括理解代码、将onclick内联附加到html、通过js将其设置为false以及使用.call运行(另一种方式)。难道这不令人困惑吗?代码可读性可能会让新手感到困惑?@user3205479:你必须做你必须做的事情。如果你一开始就坚持使用onclick
处理程序,那么这几乎是你能做的唯一一件事来解决浏览器之间的差异。我认为代码不是特别的c但如果需要,您可以使用注释来帮助稍后到来的人。