在for循环中添加jQuery点击函数

3
我要疯了。我有一个点击函数,可以创建具有唯一类和所有内容的新div。
所有这些div内都有一个按钮(另一个标记为.varibFixed的点击功能),它可以隐藏和显示由该点击函数创建的div内的div。
我的目标是使该按钮适用于创建的所有新div。但是,我的代码如下所示,只适用于第一个div,而不适用于新创建的div。
var interest = function () {
    $('.varibFixed').click(function () {
        for (var k = 1; k < i; k++) {
            if ($(this).hasClass('fixed' + k)) {
                $('.Ffixed' + k).removeClass('interestOpt');
                $('.Ffixed' + k).addClass('showInt');
                $('.Fvariable' + k).removeClass('showInt');
                $('.Fvariable' + k).addClass('interestOpt');

            } else if ($(this).hasClass('variable' + k)) {
                $('.Fvariable' + k).removeClass('interestOpt');
                $('.Fvariable' + k).addClass('showInt');
                $('.Ffixed' + k).removeClass('showInt');
                $('.Ffixed' + k).addClass('interestOpt');
            }

        }
    });
};

i的值是多少? - filype
@Filype 这是已经创建的 div 的数量的值。 - Frank
1个回答

1

看起来你需要使用jQuery .on 处理程序。

以下示例将为所有与当前选择器匹配的元素附加事件处理程序,现在和将来

理解你的代码为什么无法工作的关键在于 click 仅适用于页面上当前选定的元素集,而不是未来的元素。

var interest = function () {
    $(document).on('click', '.varibFixed', function () {
        for (var k = 1; k < i; k++) {
            if ($(this).hasClass('fixed' + k)) {
                $('.Ffixed' + k).removeClass('interestOpt');
                $('.Ffixed' + k).addClass('showInt');
                $('.Fvariable' + k).removeClass('showInt');
                $('.Fvariable' + k).addClass('interestOpt');

            } else if ($(this).hasClass('variable' + k)) {
                $('.Fvariable' + k).removeClass('interestOpt');
                $('.Fvariable' + k).addClass('showInt');
                $('.Ffixed' + k).removeClass('showInt');
                $('.Ffixed' + k).addClass('interestOpt');
            }

        }
    });
};

你是我的英雄。你能解释一下为什么普通的点击函数不起作用的逻辑吗? - Frank
1
我编辑了问题以进行解释,你的代码无法工作是因为 click 只能用于当前页面上已选择的元素集,而不能用于未来的元素。 - filype
1
最初,当您设置单击处理程序时,页面上有3个按钮(例如),因此事件处理程序仅附加到这些现有的3个按钮。有关更多信息,请参见https://learn.jquery.com/events/event-delegation/。 - geekychick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接