使用jQuery检查列表框项目是否存在

时间:2013-03-20 06:30:33

标签: jquery asp.net

我有2个列表框(项目使用jquery在它们之间移动)。已经选择了item1。然后,如果我一起选择item1和item2和item3,则只应在第二个列表框中插入item2和3。

我没有从Listbox1中删除项目。我只需要检查列表框2中是否存在其中一个选定项目。

//Code
$('#btnAdd').click(function () {

    var selectedOptions = $('#<%=lstAllRole.ClientID %> option:selected');
    if (selectedOptions.length == 0) {
        alert("Please select option to move");
        return false;
    }

    if (selectedOptions.length == 1) {
        if ($("#<%=lstSelectedRole.ClientID %> option[value='" + selectedOptions.val() + "']").length > 0) {
        }
        else {
            $('#<%=lstSelectedRole.ClientID %>').append($(selectedOptions).clone());
        }
    }
    else if (selectedOptions.length > 1) {     // Selecting more than one item to move--only append items which are not in 2nd listbox

       // **I need to validate here**

    }
});

3 个答案:

答案 0 :(得分:4)

假设这是你想要的......

试试这个

else if (selectedOptions.length > 1) {     // Selecting more than one item to move--only append items which are not in 2nd listbox

    var tempArray= $.map(selectOptions, function(n){
          return this.value;
    });

    if($.inArray("valueTochekcInSelectedOption", tempArray) != -1) 
    {
        //value not selected in list 1
    }else{
       //value selected in list 1
    }
}

答案 1 :(得分:3)

只需运行一个foreach函数,您就会找到这些项目。

//代码

else if (selectedOptions.length > 1) {

    $(selectedOptions).each(function () {
        if ($("#<%=lstSelectedRole.ClientID %> option[value='" + this.value + "']").length > 0) {

            // Do your stuff
        } else {
            $('#<%=lstSelectedRole.ClientID %>').append($(this).clone());
        }
    });
}

答案 2 :(得分:0)

我认为只要选择一个或多个选项时,您就不需要区别对待这些情况。只需获取所选元素的列表并迭代它,添加到第二个列表(如果它尚不存在)。类似的东西应该有用:

$('#btnAdd').click(function () {

var selectedOptions = $('#<%=lstAllRole.ClientID %> option:selected');

var optionsAlreadyInTheList = $('#<%=lstSelectedRole.ClientID %> option');

if (selectedOptions.length == 0) {
    alert("Please select option to move");
    return false;
} else {
    selectedOptions.each(function() {
        isInTheList = false;
        for(i=0; i< optionsAlreadyInTheList.length; i++) {
            if ($(this).val() == optionsAlreadyInTheList[i].val()) {
                isInTheList = true;
            }
        }
        if( ! isInTheList ) {
            $('#<%=lstSelectedRole.ClientID %>').append($(selectedOptions).clone());
        }
    });        

}
});

这段代码只是为了给出一个想法。我是在没有测试的情况下编写的,可能无法正常工作。