【问题标题】:Jquery on click strange behavior when generating list elementsJquery在生成列表元素时点击奇怪的行为
【发布时间】:2016-03-06 11:07:50
【问题描述】:

我将首先发布代码,然后尝试详细了解我的问题。

            projNav.on('click', '#editProj', function(event) {
            event.preventDefault();
            clearContent(returned);
            clearContent(projEditor);

            var editMain = $('#editMain'),
                editNav = $('#editNav'),
                layerCount = 1;

            // Add new layer button
            projEditor.html('<div id="editNav"><ul id="layers"><li id="new_layer">+</li></ul></div><div id="editMain"></div>');
            // Add new layer button functionality
            projEditor.on('click', '#new_layer', function(event) {
                event.preventDefault();
                $('#layers').append('<li id="layer" name="layer'+layerCount+'">'+layerCount+'</li>');
                layerCount++;
            });

            // Clicking on layer functionality
            projEditor.on('click', '#layer', function(event) {
                event.preventDefault();
                var name = $(this).attr('name');
                console.log(name);
            });             
        });

所以基本上我们这里有一个按钮(#editproj),点击它会生成另一个按钮(#new_layer),允许用户在最后一个按钮也是一部分的“ul”中创建一个列表元素的。

如果您只按一次#editProj 按钮,这可以正常工作,但是如果您单击它两次,然后单击#new_layer 按钮,您将获得两次添加的“li”元素。那么你点击#editProj按钮多少次,'li'元素被插入多少次。

我想了解这种行为,但我似乎在任何地方都找不到类似的东西,所以如果有人能引导我朝着正确的方向前进,我将非常感激。

干杯!

【问题讨论】:

    标签: javascript jquery dom onclick


    【解决方案1】:

    您需要先将on 设置为off,然后再将其设置为on

    做起来

     projEditor.off('click', '#new_layer' ); //this line is required to set on to off
     projEditor.on('click', '#new_layer', function(event) {
                    event.preventDefault();
                    $('#layers').append('<li id="layer" name="layer'+layerCount+'">'+layerCount+'</li>');
                    layerCount++;
                });
    

    【讨论】:

    • 工作就像一个魅力。非常感谢哥们,我将阅读 off() 函数以了解其行为。
    【解决方案2】:
    projNav.one('click', '#editProj', function(event) {
    

    试试这个代码。它允许单击并防止处理双击和多次单击的代码。 请参阅以下链接How to prevent a double-click using jQuery? 以获得更多想法。 我认为它会正常工作。

    【讨论】:

    • 这是我尝试的第一件事,但是在单击后会一起禁用按钮,这不是导航按钮的理想行为。 .off() 函数正是我所需要的。
    猜你喜欢
    • 2012-07-19
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多