我刚刚遇到了IE中发生的这个奇怪的问题。在html中我将一个onclick事件添加到一个元素中,该元素调用一个函数来改变这样的页面,
onclick="changePage(1, 2);"
在changePage函数内部,当这样调用函数时,我正在更改currentPageNum和nextPageNum的前进和后退按钮,
function changePage(currentPageNum, nextPageNum) {
var pageValidated = true;
//If the current page content validates, then we can change the page
if(pageValidated) {
//Add new events to both arrow buttons
$('#goBack').attr('onclick', '').unbind().click(function() {
changePage(nextPageNum, parseInt(nextPageNum) - 1);
});
$('#goForward').attr('onclick', '').unbind().click(function() {
changePage(nextPageNum, parseInt(nextPageNum) + 1);
});
}
}
我添加了attr('onclick','')。unbind()以删除旧的onclick事件,然后添加新事件。这在FF中工作正常,但在IE中,由于某种原因,它同时调用新的click事件和旧事件。我认为当你附加一个新的点击事件时,旧的事件就会消失,但现在似乎并非如此。我怎样才能在IE中使用它?
我想我知道现在发生了什么。当调用changePage函数时,它将删除旧的onclick事件,在第一个onclick事件之后添加新事件,然后调用刚刚在第一个调用之后添加的onclick事件。它表现得好像我在同一个onclick事件中有2个函数调用。
我使用的是jQuery 1.4.2版。我从这个函数中删除了额外的内容以简化它,但这是引起问题的部分。
感谢您的帮助, 大都市
答案 0 :(得分:1)
我认为解决此问题的最佳方法是不再创建内联javascript事件以及jQuery事件。我的猜测是,这会导致jQuery不知道其他地方发生了什么事件,因此两个事件都会运行。我应该在这里做的是将以下代码放入外部javascript文件
$(function() {
$('#ele').click(function() {
changePage(1, 2);
});
});
这将允许jQuery在进入changePage函数时更改事件。如果这是错误的逻辑,请纠正我。
大都市
答案 1 :(得分:0)
使用jQuery取消绑定事件的正确方法是:
$('#goBack').unbind("click").click(function() {
changePage(nextPageNum, parseInt(nextPageNum) - 1);
});
如果由于某种原因仍然失败,您可以尝试:
$("#goBack").click(undefined);
或:
document.getElementById("goBack").click = undefined;