【问题标题】:Why does my click handler only work for the first element?为什么我的点击处理程序只适用于第一个元素?
【发布时间】:2011-11-11 07:34:40
【问题描述】:

我有以下代码:

var hitarea = $("#c_" + $.fragment().category).parent().siblings('div.hitarea');
var arr = new Array();
arr.push(hitarea);

do{
  hitarea = $(hitarea.parent().parent().siblings('div.hitarea'));
  arr.splice(0,0,hitarea);
}while(hitarea.length > 0);

for(var i=0; i < arr.length; i++){
  var element = $(arr[i]);
  if(arr[i].length != 0){
    element.trigger('click');
  }
}

但是这只对第一个元素有效,并不会触发后面元素的点击事件。

帮助。

【问题讨论】:

  • 点击第一个元素会发生什么?是否重新加载页面或更改上下文?
  • 我正在实现 jquery treeview 插件bassistance.de/jquery-plugins/jquery-plugin-treeview,如果用户指定了特定的节点 ID,那么我必须打开树直到该节点
  • Rohit,如果你能解决这个问题,那就太好了,这样它就不会一直冒泡。如果您已放弃,请将其删除。

标签: javascript jquery events click jquery-events


【解决方案1】:

试试这个:

arr=[...]//array of elements

for(var i=0; i < arr.length; i++){
  var element = $(arr[i]);
  if(element.length){
    element.trigger('click');
  }
}

注意事项:

  1. 您忘记关闭外部 for 循环
  2. 无需检查!= 0 - 0 是否是 JavaScript 的“假”值之一,因此只需输入变量名即可检查它是否不为零、不为空、不为未定义等。
  3. 如果arr已经是一个jQuery对象数组,那么就没有必要再次将它包裹在jQuery对象中(即不要做$(arr[i]))。但是,如果它是一个普通的 DOM 元素或子数组,那么我上面的代码就可以工作。

【讨论】:

  • 你甚至不需要 if (element.length) 检查 - 如果选择器集为空,jQuery 将很高兴什么都不做。例如,$('#idthatdoesntexist').click() 什么都不做。
【解决方案2】:
if(arr[i].length != 0){

这是{错字吗?如果不是,那就可以解释问题了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2022-06-15
    相关资源
    最近更新 更多