无法以编程方式触发jQuery单击事件

时间:2010-12-22 17:30:38

标签: javascript cross-domain eval jquery

如果我理解正确,要以编程方式触发附加到css类为my-button的对象的jQuery click事件,您应该能够执行此操作:

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

由于某种原因,此代码无法触发附加到元素的click事件。代码的$('.my-button')部分正在工作并返回一个元素。我们知道事件处理程序附加到该元素,因为单击该元素会触发其事件处理程序的代码。处理程序附加了以下简单代码:

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

是否存在事件触发不起作用的情况?正在访问的元素是通过jQuery小部件创建的,小部件代码通过跨域JSONP调用检索并运行eval(我怀疑的因素)。

9 个答案:

答案 0 :(得分:5)

您应该使用:

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

答案 1 :(得分:5)

原来是加载了两个jQuery脚本的情况。通过JSONP检索的脚本包括jQuery的加载,并且jQuery对象用于附加事件处理程序。同时,在我的同事的网页上,他已经加载了自己的jQuery。因此,第二个jQuery对象,不知道第一个事件处理程序,无法以编程方式调用处理程序。

答案 2 :(得分:3)

我不知道跨域JSONP是否与它有关,但是我必须说以编程方式触发与html链接(<a href='...'>...</a>)有关的选择器上的click事件工作。

我怀疑它必须是某种浏览器策略,以阻止弹出窗口。考虑到浏览器具有跟踪和阻止弹出窗口的机制,并且主要允许用户在新链接出现之前授权点击操作。

如果你可以通过jQuery以编程方式单击链接,重定向,弹出窗口和所有这些东西会更容易,因此它是不可能的。只是要明确:

<a class='test' href='http://www.example.com'>Link1<a/>你不能触发它。

<a class='test2'>Link2</a>你可以在这里触发onclick,因为它不包含href。

答案 3 :(得分:2)

我遇到了同样的问题并改变了我将事件绑定到函数修复它的方式

  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

答案 4 :(得分:1)

奇。你试过.trigger('click')吗?从理论上讲,它们应该是相同的(现在查看jQuery代码以找出答案)。 编辑:看起来.click()只是.trigger('click')的代理,所以它可能无济于事。

要进行调试,请尝试在加载窗口小部件的页面上绑定实时点击事件。

答案 5 :(得分:1)

我最好的猜测是在您尝试触发事件后绑定处理程序。

尝试:

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

myButtons.click();

或使用原始代码 - 在JSONP请求的回调中触发事件。

答案 6 :(得分:0)

如果它没有回忆起正确记录的事件,特别是自定义事件,则在分配事件处理程序后,很可能会再次加载jQuery库。

使用以下方法检查您的代码:

jQuery (document).ready (function () {
    // Test your code here
});

答案 7 :(得分:0)

我也遇到过这个问题,但我没有多个 jQuery。

阅读这里的答案,我意识到这是因为执行顺序。在调用点击的函数之后,我绑定了事件处理程序几行。

这是一个 DOH!瞬间...

答案 8 :(得分:-1)

回到dom,然后执行:

$( “A按钮”)[0]。点击();