即使在Unbind之后,JavaScript单击事件也会运行3次

时间:2016-02-19 09:29:43

标签: javascript jquery for-loop onclick unbind

我有以下代码:

var resultList = resultWidget.getResultObjectList();

for(var i = 0; i < resultList.length; i++){     
    var object = resultList[i];
    $(object.getWidget()).unbind("click", object, callDataServlet);
    $(object.getWidget()).click(object, callDataServlet);
}

function callDataServlet(event) {
event.preventDefault();
   var data = event.data;
  console.log(data.getData());
}

但是我的控制台总是显示三(3)行数据:

["Washington", "Mary", "Jane", "USA", "09/02/1978"]
["Washington", "Mary", "Jane", "USA", "09/02/1978"]
["Washington", "Mary", "Jane", "USA", "09/02/1978"]

我该如何解决这个问题?我已经尝试过unbind但似乎没什么用。

3 个答案:

答案 0 :(得分:0)

你的对象是否嵌套在另一个中?如果是这样 - 试试这个:

function callDataServlet(event) {
   event.stopPropagation(); 
   event.preventDefault();
   var data = event.data;
   console.log(data.getData());
}

答案 1 :(得分:0)

您正在取消绑定尚未附加任何点击事件的元素object上的点击事件,因此$(object.getWidget()).unbind("click", object, callDataServlet);不执行任何操作,并且在每次迭代中都附加了点击事件,因此您将拥有{ {1}}事件已附加。

答案 2 :(得分:0)

感谢帮帮!我设法追查问题。问题不在于我如何添加处理程序。我在我的小部件容器上使用iScoll.js,设置为:

var _iscroll = setting.iscroll = new IScroll(setting.body, {
        click: true, 
        scrollbars: true, 
        mouseWheel: true,
        startX: 0,
    }
);

我将点击设置更改为false即可正常工作。