javascript - 为什么这个 <li> 被多次添加?

标签 javascript jquery

http://jsfiddle.net/ay9d8cuq/3/

要重新创建,请尝试多次添加位置/服务过滤器。请注意它是如何将空项目添加到列表中的。

为什么这段代码不止一次地向 DOM 添加过滤器?

$('#addFilter').click(function(){
    var filter = $('#FilterTypes').val();

    switch (filter)
    {
        case "Location":
                $('#LocationFilter').show()
                .find('.addFilter').click(function() {
                    $(this).parent().hide();
                    AddLocationFilter();
                });
                break;
            case "Service":
                $('#ServiceFilter').show()
                .find('.addFilter').click(function() {
                    $(this).parent().hide();
                    AddServiceFilter();
                });
                break;
    }
});

var AddLocationFilter = function() {
    $('#Filters').append('<li>' + $('#City').val() + ', ' + $('#State').val() + '</li>');
    $('#City').val('');
    $('#State').val('');
};

var AddServiceFilter = function() {
    $('#Filters').append('<li>' + $('#Name').val() + '</li>');
    $('#Name').val('');
};

最佳答案

那是因为每次单击 AddFilter 按钮时,您都会重新附加 click 处理程序,因此第二次它将运行两次。

试试这个:

.find('.addFilter').one('click', function() {

.find('.addFilter').one('click', function() {

参见 one()Fiddle

关于javascript - 为什么这个 <li> 被多次添加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29084458/

相关文章:

javascript - 如何使用 jquery 按类取消选中多个选择框选项?

javascript - 借助 javascript 实现 http header ?

javascript - iOS 共享扩展禁用预览

javascript - Cypress :contains().click() with or 语句

Jquery 使用 Coldfusion 自动完成

jquery - 'first' 伪类有什么意义吗?

c# - 如何在 ASP.NET MVC 客户端自定义超链接

javascript - 如何使用 jQuery 从对象获取选项

javascript - 浏览器是否支持带有多部分/表单数据的 PUT 请求

jquery - 如何在数据之前执行 jQuery 回调?