【问题标题】:Trigger click jquery not working触发点击jQuery不起作用
【发布时间】:2011-08-17 13:33:15
【问题描述】:

我正在弄清楚为什么这个简单的脚本不起作用:

jQuery.noConflict();
jQuery(document).ready(function() {
    jQuery('.next_button a').trigger('click');
});

noConflict 是必要的,因为我还在此页面中加载了原型/脚本。

如果我将 .trigger('click') 替换为另一个函数(es:.css(...),这效果很好。似乎只有触发功能坏了。

【问题讨论】:

  • 如果没有证明问题的测试用例,您的问题是不完整的。见jsFiddle
  • 我不能发网站链接,对不起,只能私下,以防万一
  • Gary Green 回答的可能是您正在寻找的内容,但如果没有其余代码,则无法知道。
  • 我明白了,但我不能再发更多了,谢谢

标签: jquery triggers pageload


【解决方案1】:

您只能触发 jQuery 创建的点击。这是 jQuery 的可爱小怪癖之一。

【讨论】:

  • 好建议,即在建立点击监听器后使用触发方法
  • 不仅如此,Pete,这也意味着使用默认锚标记
  • +1 你!这使我免于打破我的办公桌并扔掉我的电脑!给可能正在使用骨干网 + requirejs 的人的说明。如果您在 UI 元素上的触发事件不起作用,那么您可能只是在调用错误的 jquery 对象时处理了它。
  • 监听器后触发。在监听器之后触发。浪费了几个小时,直到我发现了这一点。 +1 @PeteHerbertPenito
  • 这有帮助。谢谢
【解决方案2】:

我认为this demo 不起作用,但它确实可以(Chrome 12)。它将alert 两条消息,每个点击事件一条。一个是 jQuery 创建的,一个是原生的,但我认为只能触发 jQuery 事件。

编辑:是的,click 不关注href

编辑2:所以你要手动触发的事件实际上是一个原型轮播插件创建的事件。对于下面的代码,我假设它是this one。如果是这样的话,你为什么不能直接使用 fire the event 使用 Prototype 或本机......像这样:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Title</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <style type="text/css">
        #carousel-wrapper {
            width:100px;
            height:100px;
            overflow:hidden;
            border:1px dashed red;
        }
        #carousel-content {
            width:500px;
        }
        #carousel-content .slide {
            float:left;
            width:100px;
            height:100px;
        }
    </style>

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/scriptaculous/1.8.3/scriptaculous.js"></script>
    <script type="text/javascript" src="http://prototype-carousel.googlecode.com/files/carousel-min.js"></script>
    <script type="text/javascript" src="https://github.com/kangax/protolicious/raw/5b56fdafcd7d7662c9d648534225039b2e78e371/event.simulate.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
        jQuery.noConflict();

        function fakeClick(event, anchorObj) {
          if (anchorObj.click) {
            anchorObj.click()
          } else if(document.createEvent) {
            if(event.target !== anchorObj) {
              var evt = document.createEvent("MouseEvents");
              evt.initMouseEvent("click", true, true, window,
                  0, 0, 0, 0, 0, false, false, false, false, 0, null);
              var allowDefault = anchorObj.dispatchEvent(evt);
              // you can check allowDefault for false to see if
              // any handler called evt.preventDefault().
              // Firefox will *not* redirect to anchorObj.href
              // for you. However every other browser will.
            }
          }
        }
    </script>
</head>
<body>
<div id="carousel-wrapper">
    <div id="carousel-content">
        <div class="slide">1</div>
        <div class="slide">2</div>
        <div class="slide">3</div>
    </div>
</div>
<div>
    <a href="javascript:" class="carousel-jumper" rel="slide-1">Jump to slide 1</a>
    <a href="javascript:" class="carousel-control" rel="prev">Previous slide</a>
    <a href="javascript:" class="carousel-control" id="next" rel="next">Next slide</a>
</div>
<script type="text/javascript">
    new Carousel('carousel-wrapper', $$('#carousel-content .slide'), $$('a.carousel-control', 'a.carousel-jumper'));

    document.observe("dom:loaded", function() {
//        $$('a[rel="next"]')[0].simulate('click');
        fakeClick(event, document.getElementById('next'));
    });
</script>
</body>
</html>

此事件触发演示中有两个示例(其中一个已被注释掉,但您可以切换以获得相同的结果)。一个来自Trigger an event with Prototype,它使用event.simulate.js,另一个使用来自How can I simulate a click to an anchor tag?fakeClick() 函数。在 Chrome 12 中,这两种方法都适用于我。

【讨论】:

【解决方案3】:

How can I simulate an anchor click via jquery? 检查此链接并查看 this answer by Stevanicus.

$('a#swaswararedirectlink')[0].click();

【讨论】:

  • 你能说出为什么[0] 是必要的吗?
  • [0] 获取第一个 (DOM) 元素。 .click() 函数调用正在调用浏览器的内置“点击”函数(不是 jquery 的)
  • 这应该是公认的答案,因为它提供了一个解决方案,即[0]
  • 太棒了!工作正常,没有错误。我把 $('a.sliderLinks').trigger('click'); .但没有奏效。然后我把你的代码。高超!再次感谢。
  • 该死!为什么 [0] 是必要的?奇怪的是 click() 没有触发另一个选择器,“[0] 获取第一个(DOM)元素”有什么作用? (塔希尔回复)
【解决方案4】:

正如加里所回答的那样。下面的代码将不起作用。

$('#border_wrap').trigger('click');    
$('#border_wrap').click(function(e){
    console.log("clicked1");
});

但这会.. :)

$('#border_wrap').click(function(e){
    console.log("clicked1");
});
$('#border_wrap').trigger('click'); 

【讨论】:

  • 谢谢@keithics,我犯了你上面解释过的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多