2013-03-07 3 views
0

Я пытаюсь сделать список Multiselect, чтобы я мог очистить все выбранные элементы, щелкнув первое поле в списке (это пустое значение, т. Е. «»).Ориентация на определенный список мультиселектов в jquery

Я использую этот JQuery:

$("#States").change(function() { 
    var sValue = $(this).val(); 
    if (sValue == "") { 
     $(" option:selected").removeAttr("selected"); 
    } 
    return false;  
}); 

Проблема заключается в том, что это также снимает выделение элементов во всех других моих MULTISELECT списков. Как настроить таргетинг на конкретный список? (вероятно, очень простой вопрос, но это мой первый набег на jquery).

ответ

1

Вы можете использовать $(selector, context).

$("option:selected", this).prop("selected", false); 

Примечание: val метода для выбора нескольких элементов возвращает массив не является строкой, так что вы сравниваете массив с пустой строкой.

0

можно ориентировать его более расширяя селектор JQuery:

$("#States option:selected").removeAttr("selected"); 
+0

ok можно ли абстрагироваться, чтобы я мог сделать функцию более общей? т. е. $ (этот + "вариант: выбрано") –

+3

@JohnS, конечно. См. Другой ответ :) – BenM

1

используется $(this) вместо пристреливать все выбранные опции:

$("option:selected", this).prop("selected", false); 
1

Добавить контекст в селекторе. Смотрите ниже,

$("option:selected", this).removeAttr("selected"); 

Используйте .prop, если вы используете последнюю версию JQuery. См. Другие ответы для получения дополнительной информации.

1

Вы должны ссылаться на элемент, который вы используете:

if (sValue == "") { 
    $('option:selected', this).removeAttr("selected"); 
} 
+0

Похож на то, что я был серийно опущен! http://stackoverflow.com/users/367401/benm?tab=reputation – BenM

0

Я думаю, следующий код будет работать.

$("#States").change(function() { 
    var sValue = $(this).val(); 
    if (sValue == "") { 
     $(this).find("option:selected").removeAttr("selected"); 
    } 
    return false;  
}); 
Смежные вопросы