【问题标题】:jQuery/js Removing a dynamically created checkboxjQuery/js 删除动态创建的复选框
【发布时间】:2014-01-24 20:06:24
【问题描述】:

我正在使用从 javascript 文件填充的 Eric Hynds jQuery MultiSelect 小部件。如果选中 Main,则会创建一个复选框,并在“Main”复选框下附加标签。如果未选中相应的 Main ,我如何将其设置为删除动态创建的复选框的位置?请看我的小提琴来说明我的问题http://jsfiddle.net/3u7Xj/76/

$(document).ready(function() {
    $(".multiselect").multiselect({
        header: "Choose up to 5 areas total",
        click: function (event, ui) {
             var number1=$("#dropdown1").children(":checked").length,
                number2=$("#dropdown2").children(":checked").length;

            if (ui.checked && ((number1 + number2 >=2) || $(this).children(":checked").length >= 2)) {
                return false;
            }

            var lbl = ui.value;
            if(ui.checked){
                var ctrl = '<input type="checkbox" name="chk" checked="checked" class="chk" id="'+lbl+'">';
                $("[id^=Main]:checked").each(function(){
                    $(this).nextAll('.holder:first').append('<div>'+ctrl+lbl+'</div>');    
                });
            }
            else {
                $("[id^=Main]:checked").each(function(){
                    $(this).nextAll('.holder:first').find('div input[id="'+lbl+'"]').parent().remove();
                });
            }

        },
        selectedList:5
    });
});

这样的?

$("[id^=id]:checked",false).each(function(){
    $(this).nextAll('.holder:first').find('div input[id="'+lbl+'"]').parent().remove();
    }); 

或者

if(ui.checked = false){
            $(this).nextAll('.holder:first').find('div input[id="'+lbl+'"]').parent().remove(); 

          }
            else{};

【问题讨论】:

  • 不要一个接一个地问同一个项目的 10 个问题,而是尝试学习你正在使用的语言,这样你就可以弄清楚事情摆脱自己,而不是依赖他人的帮助。这是您学习和变得更好的唯一途径

标签: javascript jquery


【解决方案1】:

添加这个怎么样?

$("input[name^=chkMain]").change(function(){
    if($(this).not(':checked')){
        $(this).next('label').next('.holder').html('');
    }
});

http://jsfiddle.net/3u7Xj/77/

这是你的意思吗?

【讨论】:

  • 是的,这是完美的。无论如何要轻松添加相反的内容?所以如果下拉菜单中的“1”被选中 THEN 检查 Main1,它也会添加它吗?
  • 当然可以!您可以在选中该框时使用if(){ ... }else{ ... } 执行某些操作,而在未选中该框时使用其他操作。这是我很快想到的:jsfiddle.net/3u7Xj/81 但它仍然需要一些工作
  • 太棒了,但是有些古怪。如果我检查 Main4-6,它将添加 value1-3 +1。希望这将在两个部分之间保持分开。
  • @user3191137 查看我对添加功能的回答
  • 我使用.clone() 函数复制下拉列表中勾选的复选框。我没有再添加任何限制。您可以使这个非常长的选择器更加具体,然后操纵克隆以使它们获得您想要的 - 我只删除了 ui-state-hover 类,但您可以做更多...玩得开心!
【解决方案2】:

试试这个

else {
    $("[id^=Main]:checked").each(function(){
        $(this).nextAll('.holder:first').find('#' + lbl).parent().remove();
    })
}

Demo

我还添加了一个功能,如果未选中,则取消选中 main 的子项。删除代码

$(".checkers").click(function() {        
    if(!$(this).is(':checked')) {
        $(this).nextAll('.holder:eq(0)').find('div input').attr("checked", this.checked);
    }
});

如果您不想要该功能。如果您想删除复选框,也可以将 .attr("checked", this.checked) 更改为 .parent().remove()

如果您想反其道而行之,即选中复选框,然后选中 Main,您可以使用以下

var checkedOnes = $('#dropdown1').nextAll('.ui-multiselect-menu').find('ul li input:checked');
for(var i = 0; i < checkedOnes.length; i++) {
    var lbl = checkedOnes.eq(i).attr('value');
    var ctrl = '<input type="checkbox" name="chk" checked="checked" class="chk" id="'+lbl+'">';
    $("[id^=Main]:checked").each(function(){
        $(this).nextAll('.holder:first').append('<div>'+ctrl+lbl+'</div>');    
    });
}

Updated Demo

【讨论】:

  • 我确实想要那个,那是我的下一步。它取消选中,但取消选中时是否可以一起删除复选框和标签?
  • 没问题,把.attr("checked", this.checked)改成.parent().remove()
  • @user3191137 我更新以适应其他答案评论中的要求
猜你喜欢
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
相关资源
最近更新 更多