Не удается программно вызвать событие нажатия jQuery - PullRequest
7 голосов
/ 22 декабря 2010

Если я правильно понимаю, чтобы программно вызвать событие щелчка jQuery, прикрепленное к объекту с классом css my-button, вы должны просто сделать это:

$('.my-button').click();

По какой-то причине этот код не может вызвать событие click, прикрепленное к элементу. Часть кода $('.my-button') работает и возвращает один элемент. Мы знаем, что обработчик событий присоединен к этому элементу, потому что нажатие на элемент вызывает код его обработчика события. Обработчик сопровождается следующим простым кодом:

$('<a class="my-button"/>')
    .click(function() { /* code here */ })
    .appendTo(parent);

Существуют ли условия, при которых не срабатывает запуск событий? Доступ к элементу создается с помощью виджета jQuery, код виджета извлекается с помощью междоменного вызова JSONP и проходит через eval (фактор, который я подозреваю).

Ответы [ 8 ]

5 голосов
/ 22 декабря 2010

Это, как оказалось, случай загрузки двух скриптов jQuery. Сценарий, полученный через JSONP, включал загрузку jQuery, и этот объект jQuery использовался для присоединения обработчика событий. Тем временем на веб-странице моего коллеги он загрузил свой собственный jQuery. Поэтому этот второй объект jQuery, не имеющий сведений об обработчиках событий первого, не смог программно вызвать обработчик.

5 голосов
/ 22 декабря 2010

Вы должны использовать:

$('.my-button').trigger("click");
3 голосов
/ 16 июня 2012

Я не знаю, имеет ли к этому отношение междоменный JSONP, однако я должен сказать, что программный запуск события щелчка на селекторе, который имеет отношение к html-ссылке (<a href='...'>...</a>), не работает ,

Я подозреваю, что это должна быть какая-то политика браузера, чтобы блокировать всплывающие окна. Примите во внимание тот факт, что браузеры имеют механизм для отслеживания и блокировки всплывающих окон и в основном позволяют пользователю авторизовать действие щелчка до появления новой ссылки.

Если бы вы могли программно щелкнуть ссылку через jQuery, перенаправление, всплывающие окна и все такое, было бы легче сделать, следовательно, это невозможно. Просто чтобы быть ясно:

<a class='test' href='http://www.example.com'>Link1<a/> Вы не можете вызвать это.

<a class='test2'>Link2</a> Вы можете вызвать здесь клик, потому что он не содержит href.

2 голосов
/ 05 марта 2012

У меня была та же проблема, и я изменил способ привязки события к функции, исправил ее

  var f=function() { .... }
  $('input.radioDomande').click(f);
  ...
  $(s+data.domanda[i].valore).trigger("click");
  //WRONG: It won't trigger the event

, затем изменил привязку в соответствии с примером в http://api.jquery.com/trigger/

  var f=function() { .... }
  $('input.radioDomande').bind('click', f);
  ...
  $(s+data.domanda[i].valore).trigger("click");
  //IT DOES TRIGGER THE EVENT
1 голос
/ 22 декабря 2010

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

Попробуйте:

var myButtons = $('<a class="my-button"/>)
                    .click(function() { /* code here */ })
                    .appendTo(parent);

myButtons.click();

или используя свой оригинальный код - вызовите событие в обратном вызове вашего запроса JSONP.

1 голос
/ 22 декабря 2010

Одд. Вы пробовали .trigger('click')? Теоретически, они должны быть одинаковыми (изучите код jQuery прямо сейчас). Редактировать: Похоже, .click () - это просто прокси для .trigger ('click'), поэтому, вероятно, это не поможет.

Для отладки попробуйте привязать событие живого клика к странице, на которую загружен виджет.

0 голосов
/ 14 января 2015

Если он не вызывает события, особенно пользовательские, которые правильно записаны, вполне вероятно, что библиотека jQuery загружается снова после назначения обработчика событий.

Проверьте ваш код, используя:

jQuery (document).ready (function () {
    // Test your code here
});
0 голосов
/ 02 октября 2014

Вернитесь в дом и сделайте это с:

$ ("abutton") [0] .click ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...