你如何使用jQuery覆盖内联javascript事件?

时间:2010-03-08 16:53:41

标签: jquery events click

我刚刚遇到了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版。我从这个函数中删除了额外的内容以简化它,但这是引起问题的部分。

感谢您的帮助, 大都市

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;