2011-02-03 3 views
0

Я пытаюсь отменить выбор элемента option с помощью jQuery. Вот мой сценарий:jQuery select option deselect

У меня есть 3 выбора опций:
[Выбрать 1]
[Выбрать 2]
[Выбрать 3]

Сценарий: Выберите 1 предварительно заполнен данными из AJAX вызов. Таким образом, у выбора 1 есть выбор 1, выбор 2, выбор 3 и т. Д.
Когда вы выбираете опцию из пункта «Выбор 1», она заполняет выбор 2 данными, а когда вы выбираете из «Выбор 2», она заполняет «Выбрать 3» и т. Д.

В зависимости от того, что вы выбираете, он помещает значения из этих опций «: selected» и применяется к переменной «url».

Таким образом, в случае, если вы только выбрать "Select 1":
URL = 'поиск/для/это/select1 /'

В-м случае, если вы выберите "Выберите 1" и "Select 2"
url = 'search/for/this/select1/select2/

И так далее.

Это путь им писать код JQuery:

var url = 'search/for/this'; 
if(element1.is(':selected')) { 
    url += element1.val();  
    // makes url = 'search/for/this/select1val/'; 
    if(element2.is(':selected')) { 
     url += element1.val();  
     // makes url = 'search/for/this/select1val/select2val/'; 
     if(element3.is(':selected')) { 
      url += element1.val();  
      // makes url = 'search/for/this/selectval1/select2val/select3val/'; 

     } 
    } 
} 

Проблема заключается в том, это требует, чтобы я де-выберите следующие параметры после того, как предыдущий был выбран, но так как есть данные, которые заполнены в, кажется, автоматически возвращает true, когда он проходит проверку состояния «: selected» в приведенном выше примере кода. Любые мысли о том, как выполнить эту функцию? Если я не буду разъяснять свою проблему. Пожалуйста, запросите более подробную информацию, и я добавлю их. Спасибо -Chris-

+0

Является ли это опечаткой, когда каждый раз url get's element1 .val()? – n8wrl

+0

, когда эти строки кода выполняются? Я предлагаю вам вызвать метод on onchange event выберите поле, а затем выполните некоторую if else логику. –

ответ

3

Похоже, вы добавляете много сложностей в то, что должно быть в противном случае достаточно простой задачей.

Как вы описали, вы хотите получить значения всех выбранных значений из раскрывающихся списков и объединить их в URL-адрес.

Функция jQuery $.map() отлично подходит для этого примера. Попробуйте следующий код:

var searchTerms = $('option:selected').map(function() { 
    return $(this).val(); 
}).get().join('/'); 

url = 'search/for/this/' + searchTerms; 

Вы бы затем выполнить этот код, когда вам нужно на самом деле получить выбранные значения (например, когда ваш поиск представлен, например, Вы также можете получить текст опциона, а не его. фактическое значение, и в этом случае код будет изменен на return $(this).text();

+0

Работал отлично. Я знал, что я слишком усложняю. Я раньше не использовал функцию map(), но я вижу, что я буду usi в будущем. Большое спасибо. –