【问题标题】:jQuery click event not firing?jQuery点击事件没有触发?
【发布时间】:2011-07-29 06:34:29
【问题描述】:

我有这个PAGE,如果你向下滚动地图到 li,我有,这是我的代码

HTML

<ul class="play_navigation">
    <li class="active"><a class="barino_story_bottom" href="#">The Story</a></li>
    <li><a class="barino_video_bottom" href="#">The Video</a></li>
    <li><a class="barino_gallery_bottom" href="#">The Gallery</a></li>
    <li><a class="barino_equipment_bottom" href="#">The Equipment</a></li>                          
</ul>

我的 jQuery

<script type="text/javascript">
    $(document).ready(function(){
        $('.play_navigation a').click(function(){
            console.log("this is the click");
            return false;
        });
    });
</script>

如果我点击链接,什么都不会发生......你可以查看源代码并在那里看到它......但是如果我将它粘贴到控制台中它工作正常......什么给了

【问题讨论】:

    标签: jquery


    【解决方案1】:

    可能对某些人有用:检查

    pointer-events: none;
    

    在 CSS 中。它可以防止点击被 JS 捕获。 我认为这很重要,因为在这种情况下,CSS 可能是您最后考虑的地方。

    【讨论】:

      【解决方案2】:

      我在这上面浪费了好几个小时。幸运的是,我找到了解决方案。如果您使用的是引导管理模板 (AdminLTE),则可能会出现此问题。 问题是我们必须使用 adminLTE 框架插件。

      示例:ifChecked 事件:

      $('input').on('ifChecked', function(event){
         alert(event.type + ' callback');
      });
      

      欲了解更多信息click here

      希望对你也有帮助。

      【讨论】:

        【解决方案3】:

        这个标记是异步添加到 DOM 中的吗?在这种情况下,您需要使用 live

        注意: .live 在最新版本的 jQuery 中已被弃用和删除(有充分理由)。使用方法及解决方法请参考下方事件委托策略。

        <script>
            $(document).ready(function(){
                $('.play_navigation a').live('click', function(){
                    console.log("this is the click");
                    return false;
                });
            });
        </script>
        

        您能够重新运行脚本块并使其正常工作这一事实告诉我,由于某种原因,元素在绑定时不可用,或者绑定在某个时候被删除。如果元素在绑定时不存在,您将需要使用live(或事件委托,最好是)。否则,您需要检查您的代码是否有其他内容会删除绑定。

        使用 jQuery 1.7 事件委托:

        $(function () {
        
            $('.play_navigation').on('click', 'a', function (e) {
                console.log('this is the click');
                e.preventDefault();
            });
        
        });
        

        如果您想在文档准备好之前绑定事件,您也可以将事件委托给文档(请注意,这也会导致 jQuery 检查每个单击事件以确定元素是否与适当的选择器匹配) :

        $(document).on('click', '.play_navigation a', function (e) {
            console.log('this is the click');
            e.preventDefault();
        });
        

        【讨论】:

        • 我不知道这个$(document).on('click', '#ID', function(){ } 我正在尝试使用旧的$("button").click(function(){} 技术并浪费了我一天的大部分时间。竖起大拇指!
        • 具有相似答案的类似问题并不能解释为什么我们需要足够精确地使用事件委托。其他人说文件加载后需要它(并非总是如此),而其他人则说总是使用它(并非总是如此)。这是关于何时必须使用 .on() 而不是 .click() 的唯一可接受的解释 - 当您的 DOM 元素您认为您的事件因 DOM 操作而不再存在时。
        • 对我有用的唯一选择是将事件委托给文档。不知道为什么。
        【解决方案4】:

        您需要阻止默认事件(跟随链接),否则您的链接将加载一个新页面:

            $(document).ready(function(){
                $('.play_navigation a').click(function(e){
                    e.preventDefault();
                    console.log("this is the click");
                });
            });
        

        正如 cmets 中所指出的,如果您的链接没有 href,那么它不是链接,请使用其他内容。

        不工作?你的代码是一团糟!和 ready() 事件无处不在...清理它,将所有脚本放在一个就绪事件中,然后重试,它很可能会解决问题。

        【讨论】:

        • 他们不应该。通过使用 preventDefault() 您不需要这些技巧。如果链接没有href,那么它不应该是链接,只需使用span或按钮即可。
        • return false 与 preventDefault() 的作用相同,它还可以防止向上传播 DOM
        • 我倾向于同意 Capsule,您的 HTML 不是动态绘制的,但该事件肯定没有在页面加载的正确时间绑定。页面加载完成后,.play_navigation ul 上没有任何事件。您应该尝试将脚本放在一起,最好将它们放在页面上最后加载的内容中。
        • 我同意 document.ready 事件分散在各处是一个坏主意...我可能会在 js 文件上创建并将它们放在那里...。我应该将该脚本放在顶部还是底部页面的
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-10
        • 1970-01-01
        • 2011-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-17
        相关资源
        最近更新 更多