在尝试在同一元素的点击事件中重新绑定元素上的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>
答案 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设置一个处理程序时,它之前已经附加了一个属性(属性)处理程序