jQuery 当我在前面添加 Class 时,点击事件不起作用

jQuery Click event doesn't work when I add a Class before

我发现了这个问题,但解决方案对我不起作用: jQuery click event not working after adding class

我有这个代码:

$('.play_button i').click(function() {
    $('.content').css( "background-position-x", "-800px" );
    $(this).addClass('first_section');
});

$( '.play_button i.first_section' ).on( "click", function() {
    $('.content').css( "background-position-x", "-1500px" );
});

为什么 .on 功能不起作用?

HTML结构:

<div class="content">
    <div class="play_button"><i class="fa fa-play-circle-o"></i></div>
</div>

我也尝试让它与 if 功能一起使用,但它也不起作用。

$('.play_button').on("click", "i", function() {

    if ( $( '.play_button i' ).hasClass( ".first_section") ) {
        $('.content').css( "background-position-x", "-1500px" );}
    else {
        $('.content').css( "background-position-x", "-800px" );
        $(this).addClass('first_section');
    }
});

我认为你可以重写你的代码,所以你只需检查同一函数内的 class:

$('.play_button i').click(function(){

    if ( !$(this).hasClass('first_section') ) {
        $('.content').css( "background-position-x", "-800px" );
        $(this).addClass('first_section');
    } else {
        $('.content').css( "background-position-x", "-1500px" );
    }

});

您的第一个代码段不起作用,因为当您尝试附加事件处理程序时 $( '.play_button i.first_section' ).on( "click", function(){..}) 具有 class first_section 的元素不在 DOM 中,所以什么都没有已附上。

如果您将 hasClass( ".first_section") 更正为 hasClass( "first_section"),您的第二个代码段将起作用 - 不需要点。

通常,将事件附加到当前不在 DOM 中的元素的最佳方法是使用 $("container").on("click","element",function() { ... });,其中 element 是元素的 jQuery 选择器想要绑定到; container 是将保存新创建的元素的元素(例如 div),当您调用此 on 方法时,该元素已存在于页面上。或者,如果您没有任何特殊容器,则直接使用 $(document)