Почему мой обработчик кликов работает только для первого элемента?

#javascript #jquery #events #click #jquery-events

#javascript #jquery #Мероприятия #нажмите #jquery-события

Вопрос:

У меня есть следующий код:

 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');
  }
}
  

Но это работает только для первого элемента, и событие щелчка следующих элементов не запускается.

Справка.

Комментарии:

1. Что происходит при щелчке по первому элементу? Произошла ли перезагрузка страницы или изменение контекста?

2. Я внедряю плагин jquery treeview bassistance.de/jquery-plugins/jquery-plugin-treeview и если пользователь указывает конкретный идентификатор узла, то я должен открыть дерево до этого узла

3. Рохит, было бы здорово, если бы ты решил этот вопрос, чтобы он не всплывал постоянно. если вы отказались от него, удалите его.

Ответ №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, поэтому простое указание имени переменной проверит, не равно ли оно нулю, not null, not undefined и т.д.
  3. Если arr это уже массив объектов jQuery, то нет необходимости снова оборачивать его в объект jQuery (т. Е. не делать $(arr[i]) ). Однако, если это обычный элемент DOM или подмассив, то мой приведенный выше код будет работать.

Комментарии:

1. Вам даже не нужна if (element.length) проверка — jQuery с радостью ничего не сделает, если набор селекторов пуст. Например, $('#idthatdoesntexist').click() просто ничего не делает.

Ответ №2:

 if(arr[i].length != 0){
  

Это { опечатка? Если нет, то это объясняет проблему.