2014-12-23 2 views
2

Я попытался сделать ввод текста, который фильтрует selectbox. Я пытаюсь исправить это много времени, но он все еще не работает. Возможно, потому что он на иврите?фильтровать поле выбора с помощью jQuery

HTML:

<option value="628077"> new york</option> 
<option value="244228">רמת גן<option> 
<option value="641332"> דימונה</option> 
<option value="240812"> הזורעים</option> 
. 
. 
. 
<option value="640375"> עתניאל</option> 
<option value="344580"> חיפה</option> 
<option value="440560"> בית רבן</option> 
<option value="520098"> הרצליה</option> 
</select> 

JQuery:

<script type="text/javascript" > 
     $('#city').keyup(function() { 

      var valthis = $(this).val(); 
      var num = 0; 
      $('select#DropDownList1>option').each(function() { 
       var text = $(this).text(); 
       if(text.indexOf(valthis) != -1) 
       { $(this).show();} 
       else{ $(this).hide();} 

      }); 

     }); 
</script> 

мне нужна ваша помощь!

+1

Я бы сказал, что вы фильтруете данные и повторно привязываете свой выбор к отфильтрованным данным, а не к фильтрации элементов интерфейса. – user1514042

+0

, пожалуйста, google for underscore/lodash libs, которые они предоставляют с помощью простого дескриптора для фильтрации, сортировки, агрегирования и т. Д. – user1514042

+1

это для автоматического завершения? html5 datalist может вам помочь. [W3Schools datalist] (http://www.w3schools.com/tags/tag_datalist.asp) – Billy

ответ

8
$('#city').keyup(function() { 
    var valthis = $(this).val().toLowerCase(); 

    $('select#DropDownList1>option').each(function() { 
     var text = $(this).text().toLowerCase(); 
     if (text.indexOf(valthis) !== -1) { 
      $(this).show(); $(this).prop('selected',true); 
     } 
     else { 
      $(this).hide(); 
     } 
    }); 
}); 

DEMO Надеюсь, что это помогает.

+0

это хорошо для короткого списка, У меня очень длинный. Мне нужно для примера, что wene я наберу ew в поле выбора будут только строки, которые включают подстроку 'ew', например 'new york' или 'new ziland' – anonicode

+0

Я обновил мой ансер и демо http: // jsfiddle. нетто/1h335x57/5 / –

0

Это не самый чистый способ, но что-то, как это должно работать: http://jsfiddle.net/milanvanschaik/11146uxb/2/

$(function() { 
    var data = [ 
     { value: 628077, text: 'New York' }, 
     { value: 628047, text: 'Amsterdam' }, 
     { value: 628037, text: 'Paris' } 
    ]; 

    data.forEach(function(val) { 
     $('#select').append($('<option></option>').attr('value', val.value).text(val.text)); 
    }); 

    $('#city').keyup(function() { 
     var inputValue = $(this).val(); 
     data.forEach(function(val) { 
      if(val.text.toLowerCase().indexOf(inputValue.toLowerCase()) != -1) { 
       $('#select>option[value="'+val.value+'"]').remove(); 
       $('#select').append($('<option></option>').attr('value', val.value).text(val.text)); 
      } else { 
       $('#select>option[value="'+val.value+'"]').remove(); 
      } 
     }); 
    }); 
}); 

Edit: Вот с какой-еврейски: http://jsfiddle.net/milanvanschaik/11146uxb/3/

+0

их вариант сделать что-то подобное, но без использования данных var '? Я имею в виду использовать очень длинный список опций, которые у меня есть. – anonicode

+0

Да, это возможно. Сначала загрузите все значения списка опций в переменную данных. Затем очистите его. http://jsfiddle.net/milanvanschaik/11146uxb/4/ –

Смежные вопросы