如何使用jQuery覆盖内联javascript事件?
我刚刚在IE中遇到了一个奇怪的问题。在html中,我向一个元素添加了一个onclick事件,该元素调用一个函数来更改这样的页面如何使用jQuery覆盖内联javascript事件?,jquery,events,click,Jquery,Events,Click,我刚刚在IE中遇到了一个奇怪的问题。在html中,我向一个元素添加了一个onclick事件,该元素调用一个函数来更改这样的页面 onclick="changePage(1, 2);" function changePage(currentPageNum, nextPageNum) { var pageValidated = true; //If the current page content validates, then we can change the page if(
onclick="changePage(1, 2);"
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);
});
}
}
在changePage函数中,我正在更改currentPageNum,以及在调用函数时向前和向后按钮的下一个Genum
onclick="changePage(1, 2);"
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中,由于某种原因,它同时调用新的点击事件和旧的点击事件。我认为,当你附加一个新的点击事件时,旧的点击事件就消失了,但现在似乎不是这样。我怎样才能让它在IE中工作
我想我知道现在发生了什么。调用changePage函数时,它将删除旧的onclick事件,在第一个onclick事件之后添加新的onclick事件,然后调用刚刚在第一个onclick事件被调用之后添加的onclick事件。这就像在同一个onclick事件中有两个函数调用一样
我使用的是jQuery版本1.4.2。我从这个函数中删去了额外的内容来简化它,但这正是造成问题的部分
谢谢你的帮助,
Metropolis使用jQuery解除事件绑定的正确方法是:
$('#goBack').unbind("click").click(function() {
changePage(nextPageNum, parseInt(nextPageNum) - 1);
});
如果由于某种原因仍然失败,您可以尝试:
$("#goBack").click(undefined);
或:
我认为解决这个问题的最好方法是不再创建jQuery事件和内联javascript事件。我猜这会导致jQuery不知道其他地方发生了什么事件,所以这两个事件都会运行。我在这里应该做的是将以下代码放入一个外部javascript文件中
$(function() {
$('#ele').click(function() {
changePage(1, 2);
});
});
这将允许jQuery在任何时候进入changePage函数时更改事件。如果这是错误的逻辑,请纠正我
Metropolis但是不取消绑定()取消绑定所有事件吗?你不需要添加attr('onclick','')来解决一些浏览器没有删除事件的问题吗?@Metropolis-我不确定,这是我第一次听说。我经常使用
.unbind(“someEvent”)
,从未遇到过问题。jQuery 1.4.2与此有关吗?第二个建议导致错误“第0行堆栈溢出”