如何在javascript中停止事件?

时间:2014-02-04 13:16:09

标签: javascript jquery events

考虑以下,

<body>
    <form id="form1" runat="server">
        <div>
            <input type="text" id="txt1" />
            <input type="button" id="btn1" value="Submit"/>            
        </div>
    </form>
    <script>         
        $("#txt1").live("blur", function () {
            console.log('blur');            
            return false;
        });

        $("#btn1").live("click", function () {
            console.log('click');
            return false;
        });
    </script>
</body>

上面的代码将记录模糊事件,并在相应事件的触发器上单击事件。 如果单击或更改文本框中的内容然后单击按钮btn1模糊和点击事件将分别发生。我想要的是如果模糊事件发生因为btn1然后点击事件不应该发生,它应该只记录模糊事件,我想要停止发生点击事件。 这该怎么做?有人可以帮忙吗?

4 个答案:

答案 0 :(得分:0)

你不能“停止”这样的其他/外国事件。 Event.preventDefault()和/或Event.stopPropagation()(在jQuery事件处理程序中返回false时将触发)将允许您停止并阻止完全相同的事件在父级上进一步处理节点

在您的实例中,您需要自己的逻辑。使用一些变量并正确设置它们并在必要时检查值。例如,点击即可设置FOOBAR = true,然后在blur中检查if( FOOBAR )并对其进行操作。

答案 1 :(得分:0)

试试这个

<form id="form1" runat="server">
   <div>
      <input type="text" id="txt1" />
      <input type="button" id="btn1" value="Submit"/>            
   </div>
</form>

javascript代码

$("#txt1").on("blur", function (event) {
   event.preventDefault();
   alert('blur');            
   return false;
});
$("#btn1").on("click", function (event) {
   event.preventDefault();
   alert('click');
   return false;
});

还要对其进行测试here并记住{jumery 1.9中使用live而不是on在jquery 1.9或更高版本中删除live关键字。

答案 2 :(得分:0)

您需要销毁一个事件,请参阅演示

希望这会对你有所帮助。

jsfiddle.net/rkumar670/5a86V

答案 3 :(得分:0)

Here是通过添加超时来解决它的一种方法。

var inFocus = false;

$("#txt1").focus(function () {
    inFocus = true;
    $("#log").prepend("<p>focus</p>");

});
$("#txt1").blur(function () {
    setTimeout(function(){inFocus = false;},200);
    $("#log").prepend("<p>blur</p>");
});
$("#btn1").click(function () {
    if (!inFocus) {
        $("#log").prepend("<p>click</p>");
    }
});

fiddle example中,我将日志输出到窗口。