2016-07-02 233 views
2

我正在解决html中的表单提交问题。请在下面的代码防止onclick发射

<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> 

看一看我想从连接到内联onclick属性射击停止clicked()功能。我想运行我的jQuery点击功能,如果出现问题,我不想触发onclick,但它总是运行clicked()函数。任何人都可以帮助我。任何帮助是极大的赞赏。

+0

是来自运行* first *的onclick属性的'clicked()'函数吗?如果您使用的是jQuery,为什么还要使用内联'onclick'属性?使用'.click()'函数绑定这两个处理程序,并且首先绑定的任何一个处理程序都可以调用stopImmediatePropogation()来阻止第二个处理程序运行。 (或将它们组合成一个处理程序。) – nnnnnn

+0

@nnnnnn对不起,但“onclick”是自动生成的代码,我们不能删除onclick事件,如果我们想附加事件通过jquery添加它们,但我们无法随时删除onclick并注意“onclick”事件处理程序最后运行 – user3205479

回答

4

其中onxyz处理程序被调用相对于动态附加的处理程序从浏览器到浏览器不同,所以原来做之前,你的处理可能无法运行该命令。

为了解决这个问题,您保存并删除onclick处理程序:

var btn = $("#btn1"); 
var clickHandler = btn[0].onclick; 
btn[0].onclick = false; 

然后,在你的处理程序,如果你想被称为是函数,你怎么称呼它:

clickhandler.call(this, event); 

实施例:

// Get the button 
 
var btn = $("#btn1"); 
 

 
// Save and remove the onclick handler 
 
var clickHandler = btn[0].onclick; 
 
btn[0].onclick = false; 
 

 
// Hook up your handler 
 
$("#btn1").click(function(event) { 
 
    alert("event triggered"); 
 
    if (!confirm("Allow it?")) { 
 
    // Disallowed, don't call it 
 
    alert("stopped it"); 
 
    } else { 
 
    // Allowed, call it 
 
    clickHandler.call(this, event); 
 
    } 
 
}); 
 

 
// The onclick handler 
 
function clicked() { 
 
    alert("clicked me"); 
 
}
<form id="form1" onsubmit="return false"> 
 
    <button id="btn1" onclick="clicked();">Submit</button> 
 
</form> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+0

正确。或者,更好的办法是,转储inline'onclick'处理程序并使用单个函数,或使用jQuery绑定两个函数。 – nnnnnn

+0

@nnnnnn:的确如此。我假设这是代码被添加到某些地方因为某些原因他们不能更改该HTML。 (令人惊讶的是,有多少问题就是这样的。) –

+0

是的,OP刚刚证实这是针对我在该问题下的评论的情况。 – nnnnnn

-1

尝试event.stopPropagation() api docs

+0

它不会工作,其冒泡事件,而不是相同的元素 – user3205479

+0

你注册了两个听众。 – Vinay

+0

OP已经尝试过'stopImmediatePropogation()',它将完成'stopPropagation()'所做的一切以及更多。 – nnnnnn

0

如果条件为真,则删除“的onclick”属性

if (some_condition == true) { 
    $("#btn1").removeAttr('onclick').click(function(event) { 
     alert("event triggered"); 

     //do something 
    }); 
} 


function clicked() { 
    alert("clicked me"); 
} 
0

我分享一个快速的解决办法不知道为什么你不能添加逻辑停止添加“的onclick =”点击();”码你正在说自动添加。

我建议你隐藏ID为“btn1”的按钮。添加样式显示:无。你不需要为此准备好函数,但只需将按钮btn1添加样式属性,或者如果这也不可能直接使用,那么使用jQuery来完成该文档。 阅读: How to change css display none or block property using Jquery?

然后添加一个新的按钮,使用jQuery与ID为“BTN2”的形式,并添加注册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 
}); 

请参考下链接到如何注册点击事件的新按钮:

Adding click event for a button created dynamically using jQuery jquery - Click event not working for dynamically created button

0

你能不能做健康检查,并在一个函数的点击()逻辑是什么?即

<script> 
function clicked() { 
    if(some_condition == true){ 
     return; 
    } 
    alert("clicked me"); 
} 
</script>