можно ли вручную вызвать щелчок по объекту dom?

#javascript #events #addthis

#javascript #Мероприятия #добавьте это

Вопрос:

Я использую addthis, и у них есть куча запутанного кода, в котором я не хочу копаться в их встроенном javascript. Я хотел бы «щелкнуть» по одной из их кнопок на моей странице без необходимости пользователя прикасаться к ней.

Итак, по сути, существует <a> , который содержит их кнопку (которую их встроенный javascript обрабатывает, когда пользователь нажимает на нее). Я хотел бы «щелкнуть» его для них с помощью моего собственного javascript, но не вижу ничего похожего на встроенную функцию «clickMe ()», связанную с объектом тега привязки.

Возможно ли это сделать, или это отсутствует в спецификации из-за соображений безопасности?

Ответ №1:

Я более внимательно просмотрел код AddThis, и их функциональность заключается в том, что у них есть onclick обработчик для родительского div элемента каждого a . Если вы знаете, на id из div объектов вы хотите щелкнуть, просто поместите это в эту строку. В качестве резервной копии вы также можете попробовать click() для a .

 var id = 'atic_facebook'; //for example
document.getElementById(id).onclick();
  

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

1. хм… как, черт возьми, я ЭТО пропустил?!

2. @Niklas Я тестировал это, работает с Firebug: document.getElementById('atic_facebook').onclick(); но только тогда, когда для него не установлено значение display:none

3. @js1568 это перенаправляет пользователя на facebook?

4. флажок установлен преждевременно. щелчок не является распознанной функцией в теге A, а onclick() работает в chrome, но не в webkit или safari …. вернемся к чертежной доске 🙂

Ответ №2:

Это функция для программного запуска события в элементе DOM:

 function eventFire(el, etype){
   if (el.fireEvent) {
     (el.fireEvent('on'   etype));
   } else {
     var evObj = document.createEvent('Events');
     evObj.initEvent(etype, true, false);
     el.dispatchEvent(evObj);
   }
}
// usage
eventFire(document.getElementById('someHref'),'click');
eventFire(document.getElementById('someElement'),'mouseover');
// etc.
  

Ответ №3:

Вы можете вызвать функцию «onclick» элемента напрямую:

 var as = document.getElementsByTagName('a'), i;
for (i=0; i<as.length; i  ) {
  if (as[i].onclick) {
    as[i].onclick(); // Run the "onclick" function.
  } else if (as[i].href) {
    window.location = as[i].href; // Browse to the URL.
  } else {
    // Not much we can do!
  }
}
  

Ответ №4:

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

Способ сделать это (и это на 100% кроссбраузерно) — просто перенаправить страницу на то, что addthis установил в качестве href для ссылки.

Другими словами…

 self.location.href = document.getElementById("addThisFbLink").href;
  

Это все, что нужно для этого.

@kooilnc, я ценю ваше решение, это было не то, что мне было нужно, но в некотором смысле это привело меня к выяснению этого, так что спасибо.

Ответ №5:

Триггер jQuery():

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

 $('a').trigger('click');