0

我使用erichynds 的 jquery MultiSelect Plugin更改为 2 级链式选择框,但它工作得很好,但到目前为止还有一个小缺陷需要修复。

请在此处查找工作示例。

例如,我在第一个框中选择了选项“2”,第二个框也将填充 optgroup 为“2”,然后我选择了“2B”,文本在第二个框中。好的,现在我在第一个框中取消选择“2”,“2”的 optgroup 消失了,但是文本仍然显示在第二个框中,当我在第一个框上取消选择相关选项时,如何与文本一起删除?

function filterActivityTrigger(e){
     var ids = $('#filterActivity + div input:checked').map(function(i) {
        return $(this).val().replace(/ .*/, '');
     }).get(); // Retrieve checked IDs

     $('#filterSubActivity + div div label').each(function() { // Show matching options
        $(this).toggle($.inArray($('input', this).val().replace(/(\d+).*/, '$1'), ids) > -1);
     });

     $('#filterSubActivity + div label.optGroup').each(function() { // Show matching groups
        $(this).toggle($(this).next().find('label:visible').length > 0);
     });
}

请指教,谢谢。

4

2 回答 2

0

您可以在第一个框中检查选中元素的长度,然后进行相应操作。请参考以下脚本:

function filterActivityTriggeredUser(e){
   var ids = $('#filterActivity + div input:checked').map(function(i) {
        return $(this).val().replace(/ .*/, '');
    }).get(); // Retrieve checked IDs
    var len = ids.length;

    $('#filterSubActivity + div div label').each(function() { // Show matching options
        $(this).toggle($.inArray($('input', this).val().replace(/(\d+).*/, '$1'), ids) > -1);
      if(len == 0)
            $('#filterSubActivity span').text('All');
             $(this).removeAttr('checked');
    });

    $('#filterSubActivity + div label.optGroup').each(function() { // Show matching groups
        $(this).toggle($(this).next().find('label:visible').length > 0);
    });
}

function filterSubActivityTriggeredUser(e){ 
    if($(e).attr('checked')=='checked') {

    }
}

$(document).ready(function() {

    $("#filterActivity").multiSelect({
        selectAll: false,
        noneSelected: 'All',
        oneOrMoreSelected: '*'
    },
    filterActivityTriggeredUser);

    $("#filterSubActivity").multiSelect({
        selectAll: false,
        noneSelected: 'All',
        noneSelectedText : 'All',
        oneOrMoreSelected: '*'
    },
    filterSubActivityTriggeredUser);

});

这是工作示例:http: //jsfiddle.net/G2kXg/1/

于 2013-03-28T06:09:49.940 回答
0

试试我的版本

function filterActivityTriggeredUser(e){
    var ids = $('#filterActivity + div input:checked').map(function(i) {
        return $(this).val().replace(/ .*/, '');
    }).get(); // Retrieve checked IDs
    $('#filterSubActivity + div div label').each(function() { // Show matching options
        $(this).toggle($.inArray($('input', this).val().replace(/(\d+).*/, '$1'), ids) > -1);
    });
    $('#filterSubActivity + div label.optGroup').each(function() { // Show matching groups
        $(this).toggle($(this).next().find('label:visible').length > 0);
    });

    var ids1 = [];
        $('#filterSubActivity + div div label:visible').each(function(i) {
             if($(this).find('input:checked').length>0)
                ids1.push($(this).text());
    });


    $('#filterSubActivity span').text(ids1.join(" ,"));  
    if(ids1.length==0)
        $('#filterSubActivity span').text('All');


}

每次更改 filterActivity 时,我都会设置“filterSubActivity”

这是工作示例http://jsfiddle.net/hsQjh/17/

我希望这会有所帮助。

于 2013-03-28T23:27:30.517 回答