-1

複数選択用のこの検索機能があります。

var SWAPLIST = {};
SWAPLIST.search = function(list, search) {
  $(list)
    .children()
    .prop('selected', false)
    .filter(function() {
       if (!search) 
       {
         return false;
       }
       return $(this)
       .text()
       .toLowerCase()
       .indexOf(search.toLowerCase()) > - 1;
    })
   .prop('selected', true)
};

このイベントにバインドします。

$(document).ready(function(){
   $('.entitySearch').keyup(function() {
     var kind    = $(this).attr('kind');
     var left  = '.leftEntities[kind=' + kind +']';
     var right = '.rightEntities[kind='+ kind +']';

     SWAPLIST.search(left + "," + right, $(this).val());
   });
});

これは私の複数選択の例です:

<select class="leftEntities grid5" kind="<?php echo $firstKeyLeft;?>" multiple="multiple" size="10">     
  <option> a </option>
  <option> ab </option>
  <option> abc </option>
  <option> abcd </option>    
</select>   

これは私の検索入力です:

<div class="grid6 marginTop10px">
    <input kind="<?php echo $firstKeyLeft;?>" class="entitySearch form-control-static" role="form" type="text" size="25"/>
    <span class="glyphicon glyphicon-search"></span>
    <label> Suchen </label>
</div>           

そして今、検索キーを入力しているときに一致しないオプションを非表示にし、入力した検索キーを削除または編集する (一致するように) ときにそれらを再表示したいと考えています。

元の関連する php および html コード: http://codepad.org/4CXgkiei

4

1 に答える 1

1

サンプル マークアップを修正し、新しい JS を作成して機能させました。

ここで私の実例をチェックしてください: http://jsfiddle.net/7ZETF/2/

例の JS は次のとおりです。

$(function () {
    $('input[data-filter="example_select"]').on('keyup', function () {
        var $select_to_filter = $('[name="' + $(this).attr('data-filter') + '"]');
        var $move_hidden_options_to = $('select.hidden_options[for="' + $(this).attr('data-filter') + '"]');
        var filter_value = $(this).val();
        $select_to_filter.find('option').each(function () {
            if ($(this).text().indexOf(filter_value) == -1) {
                $(this).prependTo($move_hidden_options_to);
            }
        });
        $move_hidden_options_to.find('option').each(function () {
            if ($(this).text().indexOf(filter_value) !== -1) {
                $(this).prependTo($select_to_filter);
            }
        });
    });
});
于 2013-10-03T16:11:01.497 に答える