jquery - 动态分配 jQuery 按钮部分失败

标签 jquery jquery-ui

我有一个布局,用户(将)能够选择模板。根据用户单击的按钮,将评估和更新所有匹配的(按类名称)按钮。

假设我有 4 个按钮用于四个不同的模板。当然,每个按钮都可以单击。单击的按钮应成为新的激活模板,其他按钮应重置(因为在另一个模板处于事件状态之前)。我以为我已经解决了这个问题,但由于某种原因,当我想重新分配一个新按钮时,只有最后一个按钮被替换为新按钮。之前的其他按钮则没有。

JSFiddle 中提供的情况不是一个完整的功能解决方案,但我很好奇为什么只有最后一个按钮处理正确。谁能告诉我更多有关此的信息吗?

fiddle 可以找到:http://jsfiddle.net/z3jYC/ 。 (这是一个工作示例,提供了裸代码来展示该示例)。

这是代码:

HTML:

<button class="activate-tpl" data-template-name="temp1">activate template</button><br/>
<button class="activate-tpl" data-template-name="temp2">activate template</button><br/>
<button class="activate-tpl" data-template-name="temp3">activate template</button><br/>
<button class="activate-tpl" data-template-name="temp4">activate template</button>

JS

$(document).ready(function() { 

    $('button').button();
    var oButton = $('<button class="activate-tpl" data-template-name="">activate template</button>').button();

    $('.activate-tpl').click(function() { 

        var sClicked = $(this).attr('data-template-name');

        $('.activate-tpl').each(function() { 

            if($(this).attr('data-template-name') != sClicked) { 

                var oNewButton = oButton;
                oNewButton.attr('data-template-name', $(this).attr('data-template-name'));
                $(this).replaceWith(oNewButton);
            } else { 

                $(this).replaceWith('You\'ve activated me!');
            }
        });
    });
});

最佳答案

这是你的新 fiddle :http://jsfiddle.net/z3jYC/2/

我注意到的一些事情:

--我将您的 .attr("data-template-name"); 更改为 .data("template-name");
--循环没有重新扫描更改后的模板,因为您从其中删除了 activate-tpl 类!我在这个类中添加了跨度。
--由于动态替换的内容,我将您的点击事件更改为使用 .on

if(data.data("template-name") != sClicked || !data.is("button")) { 
    var oButton = $('<button class="activate-tpl" data-template-name="' + $(this).data("template-name") + '">activate template</button>').button();

    $(this).replaceWith(oButton);
} else { 
    $(this).replaceWith('<span class="activate-tpl">You\'ve activated me!</span>');
}

我还更改了按钮的分配方式,看起来效果更好一些。

编辑:我注意到如果没有template-name数据,替换按钮会被分配一个空白值。如果这种情况持续下去,则会为多个按钮分配该值,从而导致多个按钮被替换。

将附加文本更改为:

data.replaceWith('<span class="activate-tpl" data-template-name="' + sClicked + '">You\'ve activated me!</span>');

关于jquery - 动态分配 jQuery 按钮部分失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16216556/

相关文章:

jquery-ui - IE8 在选择后清除 JQuery-UI 自动完成输入字段

jquery - 使用 jQuery 绑定(bind)到右键单击?

javascript - JQuery 对话框 - 用关闭按钮替换超时

javascript - 切换除一项之外的所有选项,然后切换异常(exception)的一项?

javascript - 文本框使用键搜索数组并显示最接近的结果

javascript - 在继续循环之前让 SetTimeout 完成

javascript - 如何在 Javascript 的帮助下将图像拖放到同一 block 中?

Jquery 自动完成更改源

jquery - 如何在鼠标悬停时停止滚动

javascript - 子菜单的 2 列布局