IE和jquery事件绑定

时间:2011-02-15 16:41:16

标签: javascript-events jquery

在尝试在同一元素的点击事件中重新绑定元素上的click事件时,我遇到了一点烦恼。

用户基本上点击一个元素,运行一些代码然后将该元素的click事件更改为指向另一个函数。

现在除了IE之外的每个浏览器都可以正常工作。

然而,在IE中,指向元素click事件的新函数在被绑定时被触发,而我无法终身解释原因。

有什么想法吗?代码如下......

<!DOCTYPE html>
<html>
<head>

<script type='text/javascript' src='http://code.jquery.com/jquery-1.5.js'></script>

<script type='text/javascript'>

function setUpBind()
{
    $("#foo").removeAttr("onclick");
    $("#foo").bind("click", function() {newBindFunction()});
    alert('First bind function');

}

function newBindFunction()
{
    alert('This is the new bind function.');
}

</script>

</head>
<body>

    <span id="foo" onclick="setUpBind()">Button 1</span>


</body>


</html>

1 个答案:

答案 0 :(得分:1)

从jquery做到这一切! http://jsfiddle.net/gNvQg/3/

$(function() {

      function firstHandler() {
           $('#foo').unbind('click', firstHandler);
           $('#foo').click(secondHandler);
           alert('First Handler');
      }

      function secondHandler() {
           alert('Second Handler');          
      }

      $('#foo').click(firstHandler);
})

这是一个没有jquery的jsfiddle,因为你似乎想通过HTML http://jsfiddle.net/gNvQg/2/

附加它们

我认为所吸取的教训是“不要将属性/属性样式处理程序与通过addEventListener / attachListener添加的事件混合”。我发现IE的错误只发生在你通过jquery设置一个处理程序时,它之前已经附加了一个属性(属性)处理程序