在多选中选择后搜索功能不正常

时间:2014-07-14 10:53:16

标签: javascript jquery html

我在一个页面中有两个多选项(select-cities& selected-cities),我可以来回传输选项。我已将搜索功能提供给选择城市列表。一切都按照我的需要运作。

问题是当我在一个搜索框中搜索并从列表中选择一些选项并在另一个搜索框中移动而删除第一个搜索框中键入的字母时,第二个搜索框不起作用。我是初学者因此不知道如何根除这个问题。我想它必须使用“keyup()”函数。

我做了以下步骤: 1.首先我在#someinput框中键入e,并选择了三个选项。 2.这些值现在位于选定的城市列表中。 3.现在我尝试搜索第二个搜索框而不删除我在第一个搜索框中输入的内容。问题开始的地方。它不起作用。

这里是演示:http://jsfiddle.net/cs6Xb/131/

HTML:

<input id="someinput">
<br/>
<select class="select-cities" name="city" id="optlist" multiple="multiple">
    <option>Frederiksberg</option>
    <option>Vanløse</option>
    <option>Glostrup</option>
    <option>Brøndby</option>
    <option>Roskilde</option>
    <option>Køge</option>
    <option>Gentofte</option>
    <option>Hillerød</option>
    <option>Tårnby</option>
    <option>Vallensbæk</option>
</select>
</input>
<br/>
<input id="someinput1"/><br/>

<select class="chosen-cities" name="chosen-cities-name" id="optlist1" multiple="multiple"></select>

jQuery的:

$(function () {
    opts = $('#optlist option').map(function () {
        return [[this.value, $(this).text()]];
    });
    opts1 = $('#optlist1 option').map(function () {
        return [[this.value, $(this).text()]];
    });



    $('#someinput').keyup(function () {

        var rxp = new RegExp($('#someinput').val(), 'i');
        var optlist = $('#optlist').empty();
        opts.each(function () {
            if (rxp.test(this[1])) {
                optlist.append($('<option/>').attr('value', this[0]).text(this[1]));
            } else{
                optlist.append($('<option/>').attr('value', this[0]).text(this[1]).addClass("hidden"));
            }
        });
        $(".hidden").toggleOption(false);

    });
        $('#someinput1').keyup(function () {

        var rxp = new RegExp($('#someinput1').val(), 'i');
        var optlist = $('#optlist1').empty();
        opts1.each(function () {
            if (rxp.test(this[1])) {
                optlist.append($('<option/>').attr('value', this[0]).text(this[1]));
            } else{
                optlist.append($('<option/>').attr('value', this[0]).text(this[1]).addClass("hidden"));
            }
        });
        $(".hidden").toggleOption(false);

    });
    $('.select-cities').click(function () {
        $('.select-cities option:selected').remove().appendTo('.chosen-cities');
        opts = $('#optlist option').map(function () {
            return [[this.value, $(this).text()]];
        });
        opts1 = $('#optlist1 option').map(function () {
        return [[this.value, $(this).text()]];
    });
    });

    $('.chosen-cities').click(function () {
        $('.chosen-cities option:selected').remove().appendTo('.select-cities');
        opts = $('#optlist option').map(function () {
            return [[this.value, $(this).text()]];
        });
        opts1 = $('#optlist1 option').map(function () {
        return [[this.value, $(this).text()]];
    });
    });


});

jQuery.fn.toggleOption = function( show ) {
    jQuery( this ).toggle( show );
    if( show ) {
        if( jQuery( this ).parent( 'span.toggleOption' ).length )
            jQuery( this ).unwrap( );
    } else {
        if( jQuery( this ).parent( 'span.toggleOption' ).length == 0 )
            jQuery( this ).wrap( '<span class="toggleOption" style="display: none;" />' );
    }
};

1 个答案:

答案 0 :(得分:1)

问题是

 $(".hidden").toggleOption(false);

我根据相应的$(".hidden")

更改了optlist选择器
$("#optlist .hidden").toggleOption(false);

$("#optlist1 .hidden").toggleOption(false);

Working Fiddle