【问题标题】:jquery click event fires for the first time but fails second time.It works when page refreshesjquery click事件第一次触发但第二次失败。它在页面刷新时起作用
【发布时间】:2018-03-08 08:54:44
【问题描述】:

我在点击另一个 div 时打开了一个 div。下面的代码似乎只是第一次工作。
它在页面刷新时工作。关闭事件总是被调用,但点击事件不会触发。

$('.redirection-list .redirection a').on('click', clickevent);


function clickevent() {
    $(this).attr("href", "#myCurrentDiv");
    $('.redirection-list li').removeAttr('id');
    $(this).closest('li').attr("id", "myCurrentDiv");
    $('.redirection-list .redirection').removeClass('active');
    $(this).closest('li').addClass('active');
    $('.block-list').removeClass('col-sm-12');
    $('.block-list').addClass('col-sm-6');
    $('.redirection-edit').addClass('open');

    $('.redirection-status span:nth-of-type(2n)').hide();
    $('.redirection-status span:nth-of-type(n)').css('border-radius', '50px');

    if ($(window).width() <= 768) {
        $('body').addClass('mobile-device');
    }
    else {
        $('body').removeClass('mobile-device');
    }

    $('.redirection-edit').insertAfter(this);
    $('.redirection-edit').fadeIn(700);
    if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
        var target = $(this.hash);
        target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
        if (target.length) {
            if ($(target).closest('.block-list').hasClass('search-list')) {
                $('html, body').animate({
                    scrollTop: target.offset().top - 185
                }, 500);
                return false;
            }
            else {
                $('html, body').animate({
                    scrollTop: target.offset().top - 112
                }, 500);
                return false;
            }
        }
    }
}


$('.redirection-edit .close').click(function () {
    $('.redirection-edit').removeClass('open');
    $('.redirection-edit').fadeOut(500);
    $('.redirection-list .redirection').removeClass('active');
    $('.block-list').removeClass('col-sm-6');
    $('.block-list').addClass('col-sm-12');

    $('.redirection-status span:nth-of-type(2n)').show();
    $('.redirection-status span:nth-of-type(n)').css('border-radius', '50px 0px 0px 50px');
    $('.redirection-status span:nth-of-type(2n)').css('border-radius', '0px 50px 50px 0px');
    $('.redirection-list .redirection a').bind('click',clickevent)
});

【问题讨论】:

    标签: jquery jquery-click-event


    【解决方案1】:

    首先,过多的代码和缺乏 HTML 代码使问题变得混乱。无论如何,据我了解,一旦完成,事件处理程序就不会绑定到锚点,如果锚点正在被操纵或动态创建,如果是这种情况,更改代码如下就可以解决问题

    $('body').on('click', '.redirection-list .redirection a', clickevent);
    

    【讨论】:

    • $('body').on('click', '.redirection-list .redirection a', clickevent);不触发点击事件,而是我使用 $('document').on('click', '.redirection-list .redirection a', clickevent);这触发了点击事件,但只有一次;第二次没有。是的,它是使用 angularjs 的动态人口。
    • $('document').on('click', '.redirection-list .redirection a', clickevent) 肯定适用于动态创建的元素尝试控制台日志 $('.redirection-list .redirection a') 匹配 DOM 中的任何元素
    猜你喜欢
    • 2016-10-24
    • 2015-12-13
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多