代码之家  ›  专栏  ›  技术社区  ›  Metropolis

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

  •  2
  • Metropolis  · 技术社区  · 14 年前

    我刚刚遇到了一个在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事件,然后添加新的onclick事件。这在ff中运行良好,但在ie中,由于某种原因,它同时调用新的click事件和旧的click事件。我以为当你附加一个新的点击事件时,旧的那个已经消失了,但现在似乎不是这样了。我怎样才能让这个在ie中工作呢?

    我想我知道现在发生了什么。调用changepage函数时,它将删除旧的onclick事件,在第一个onclick事件之后添加新的onclick事件,然后调用第一个onclick事件之后直接添加的onclick事件。好像在同一个onclick事件中有两个函数调用。

    我使用的是jquery 1.4.2版。我从这个函数中删去了额外的内容来简化它,但这是导致问题的部分。

    谢谢你的帮助, 大都市

    2 回复  |  直到 14 年前
        1
  •  1
  •   Metropolis    14 年前

    我认为解决这个问题的最好方法是不再创建内联javascript事件和jquery事件。我猜这会导致jquery不知道其他地方发生了什么事件,所以这两个事件都会运行。我应该在这里做的是将以下代码放入外部javascript文件

    $(function() {
        $('#ele').click(function() {
            changePage(1, 2);
        });
    });
    

    这将允许jquery在进入changepage函数时更改事件。如果这是错误的逻辑,请纠正我。

    大都市

        2
  •  0
  •   karim79    14 年前

    使用jquery解除事件绑定的正确方法是:

    $('#goBack').unbind("click").click(function() {
        changePage(nextPageNum, parseInt(nextPageNum) - 1);
    });
    

    如果出于某种原因 仍然 失败您可以尝试:

    $("#goBack").click(undefined);
    

    或:

    document.getElementById("goBack").click = undefined;