2013-05-22 3 views
3

У меня есть элемент с несколькими элементами, и как только я выберу на нем опцию, тогда невозможно отменить выбор всех параметров. Мне нужно отменить выбор, когда я нажимаю его, и он был выбран ранее.Как я могу отменить выбор из множественного выбора на клике ТОЛЬКО, если он выбран

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

http://jsfiddle.net/JRgdv/

<select multiple="multiple"> 
    <option>11111</option> 
    <option selected>2</option> 
    <option>33333</option> 
    <option>44444</option> 
</select> 

Я знаю, что я кнопку или область, которую я могу нажать, чтобы очистить все это может иметь, но я truying сделать это так, чтобы при нажатии на выбранный вариант, то он не выбирает его

Редактировать: CTRL + Click не то, что я ищу. это должно быть только с мышкой

+2

Насколько это возможно, браузер уже может отменить выбор, если вы нажмете «Ctrl + click». – voithos

+1

дубликат http://stackoverflow.com/questions/3887128/once-you-select-an-item-on-a-multiselect-html-listbox-is-there-anyway-to-desele –

+0

Ваше редактирование: _CTRL + Щелчок не то, что я ищу. он должен быть с помощью мыши только_, запутан. Это многопозиционный выбор, и пользователь будет использовать ctrl для выбора нескольких элементов. –

ответ

5

Может быть обходной путь:

SEE DEMO

$('select option').on('mousedown', function (e) { 
    this.selected = !this.selected; 
    e.preventDefault(); 
}); 

EDIT: это не работает на IE (версия ???). Для решения кросс-браузера, даже прибегая к этому, попробуйте вместо этого: https://stackoverflow.com/a/21797607/1414562

1

Это может быть немного взломанный, но он работает. Демонстрация: http://jsfiddle.net/tymeJV/JRgdv/1/

var currentSelect = $("select option:selected").index(); 

$("select option").click(function() { 
    if ($(this).index() == currentSelect) { 
     $(this).prop("selected", false); 
     currentSelect = -1; 
    } else { 
     currentSelect = $(this).index(); 
    } 
}); 
+0

Не работает, если было выделено несколько опций. – j08691

+0

@ j08691 - Есть ли способ обойти это эффективно ... все, о чем я действительно могу сейчас думать, это сделать массив, нажимать на него выбранные значения ... щелкнуть, найти массив, если найденные значения, поместить его, удалить выбран. – tymeJV

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