为什么我的JQuery事件处理程序不能删除代码

时间:2014-02-28 06:45:21

标签: jquery

这里的绝对新手......

<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
</head>
<body>
    <script type="text/javascript">
        function Foo() {
            d = new Date();
            alert("Hello" + d.getTime());
            alert($('#a1').attr('id'));
            $('#a1').unbind("click");
            $('#a1').off("click");
            $('#a1').unbind();
        }

        $(document).ready(function() {});
    </script>
    <input id='a1' type="button" value="foo" onclick="Foo();" />
</body>
</html>

然而每当我点击我的foo按钮时,它会很好地弹出所有警报......完全无视我的解除绑定,关闭,解除绑定的电话。

删除事件处理程序需要什么?

我的目标是当HTML设置的事件处理程序执行时,在事件处理程序中我取消绑定/取消设置/撤消/关闭由HTML设置的事件处理程序。

下面的许多解决方案完全杀死了事件处理程序。但我想在第一次点击后 后停止。

我无法通过“one”方法设置事件。 HTML已经有了onclick事件。

4 个答案:

答案 0 :(得分:7)

jQuery的unbind()off()仅适用于通过jQuery分配的事件处理程序,而不适用于通过onclick属性分配的事件处理程序。

如果要清除该属性,可以这样做:

$("#a1").removeAttr("onclick");

实施,它看起来像这样:

<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
</head>
<body>
    <script type="text/javascript">
        function Foo() {
            var d = new Date();
            alert("Hello" + d.getTime());
            alert($('#a1').attr('id'));
            // remove event handler
            $("#a1").removeAttr("onclick");
        }

        $(document).ready(function() {});
    </script>
    <input id='a1' type="button" value="foo" onclick="Foo();" />
</body>
</html>

此处的演示演示:http://jsfiddle.net/jfriend00/bQ9Lq/


如果你想要一个只对一次点击活动的事件处理程序,那么你可能想用jQuery的.one()(而不是使用onclick)来安装原始事件处理程序,这将在它触发后自动删除事件处理程序一次,您甚至不必编写代码来删除它。

<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
</head>
<body>
    <script type="text/javascript">
        $(document).ready(function() {
           $("#a1").one("click", function() {
               var d = new Date();
               alert("Hello" + d.getTime());
               alert($('#a1').attr('id'));
           });
        });
    </script>
    <input id='a1' type="button" value="foo" />
</body>
</html>

答案 1 :(得分:0)

因为您使用的是内联事件处理程序,所以只需删除onclick属性

即可
function Foo() {
    d = new Date();
    alert("Hello" + d.getTime());
    alert($('#a1').attr('id'));
    $('#a1').removeAttr("onclick");
}

答案 2 :(得分:0)

你没有与jQuery绑定,所以与jQuery取消绑定而不是与javascript解绑,你需要索引或get()

<强> Live Demo

$('#a1')[0].onclick = null;

$('#a1').get(0).onclick = null;;

您可以使用attr()

取消绑定

<强> Live Demo

 $('#a1').attr("onclick", "");

答案 3 :(得分:-1)

试试这个

$(document).ready(function() {
    $( "#a1" ).bind( "click", function() {
        d = new Date();
        alert("Hello" + d.getTime());
        alert($('#a1').attr('id'));
        $('#a1').unbind("click");
    });
 });

<input id='a1' type="button" value="foo" />