Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jQuery覆盖内联javascript事件?_Jquery_Events_Click - Fatal编程技术网

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

如何使用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(

我刚刚在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(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行堆栈溢出”