2015-03-24 4 views
0

JQuery выберите выпадающего значение символ экранирования

<select id=SomeDropdown> 
 
    <option value="0">Nothing Here</option> 
 
    <option value="1">- Requirement Analysis</option> 
 
    <option value="2">- - Training & Self Learning</option> 
 
    <option value="3">- - - Bug Fixing</option> 
 
<select>

Обратите внимание, что значение параметра/текст может содержать следующие символы:

  1. одиночных кавычки (')
  2. дефиса (-)/двойных дефисы (- -)

Когда клавиатура используется для подключения ct Bug fixing выбирает только один, но работает с использованием -.

Каков правильный способ избежать символов (в моем случае дефис) и разрешить пользователю выбирать значения из выпадающего меню? keyboard?

+2

Что значит «когда пользователь исправляет ошибку»? Если вы разрешаете пользователям выполнять обычный текстовый поиск, добавьте свой полный код в вопрос. Похоже, вы должны использовать ': contains', а не escape-символы. –

+0

Используете ли вы стандартный выбор или плагин? –

+0

@RoryMcCrossan. Опечатка. Проверьте обновление. – Slimshadddyyy

ответ

0

Без использования плагина это может быть сложно. Я закончил тем, что использовал тайм-аут, запускаемый при включении и сбросе на keydown (ref Run javascript function when user finishes typing instead of on key up?)

Логика заключается в том, что таймаут обрабатывает процесс записи, когда останавливается, используя поиск jQuery для первого элемента элемента, который начинается с символов, написанных и установите его как выбранный.

Код:

//setup before functions 
var typingTimer;    //timer identifier 
var doneTypingInterval = 500; //time in ms, 5 second for example 
var keyText=''; 

//on keyup, start the countdown 
$('#SomeDropdown').keyup(function(e){ 
    clearTimeout(typingTimer); 
    keyText+=String.fromCharCode(e.which); 
    typingTimer = setTimeout(doneTyping, doneTypingInterval); 
}); 

//on keydown, clear the countdown 
$('#SomeDropdown').keydown(function(e){ 
    clearTimeout(typingTimer);  
}); 

//user is "finished typing," do something 
function doneTyping() { 

    console.log(keyText) 
    $("#SomeDropdown option").filter(function() { 
     return this.text.replace(/(\-\s)/gi, '').toUpperCase().lastIndexOf(keyText, 0) === 0; 
    }).attr('selected', true); 

    keyText=''; 
} 

Известные проблемы:

  • назад пространство открыть выберите опцию и разбить логику
  • при открытии избранных, пользовательские типирование не признается, что использовать встроенный в одном

Демонстрация: http://jsfiddle.net/th6oxfaq/

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