Перевірте, чи вибрано параметр jQuery, якщо не вибрано за замовчуванням


207

Використовуючи jQuery, як перевірити, чи є опція, вибрана у вибраному меню, а якщо ні, призначте один із варіантів як обраний.

(Вибір генерується за допомогою лабіринту функцій PHP у додатку, який я щойно успадкував, тому це швидке виправлення, поки я обертаю голову навколо цих :)


Відповіді:


270

Хоча я не впевнений у тому, що саме ви хочете досягти, цей штрих код працював для мене.

<select id="mySelect" multiple="multiple">
  <option value="1">First</option>
  <option value="2">Second</option>
  <option value="3">Third</option>
  <option value="4">Fourth</option>
</select>

<script type="text/javascript"> 
$(document).ready(function() {
  if (!$("#mySelect option:selected").length) {
    $("#mySelect option[value='3']").attr('selected', 'selected');
  }
});
</script>

86
Підбірку було б простіше прочитати так:$("#mySelect").val(3);
Jørn Schou-Rode

6
Це привело мене в правильний шлях, але мені це потрібно було зробити: $("#mySelect option")[2]['selected'] = true; з'ясував це після дослідження об’єктних структур у Firebug.
semperos

28
Станом на jQuery 1.6 ви можете встановити властивість безпосередньо. $("#mySelect").prop("selectedIndex", 2)
gradbot

1
Версія .val (x) не працює в Internet Explorer 8, тому @gradbot має це право, оскільки це працює у всіх браузерах.
Сорсі

30

Для цього не потрібно використовувати jQuery:

var foo = document.getElementById('yourSelect');
if (foo)
{
   if (foo.selectedIndex != null)
   {
       foo.selectedIndex = 0;
   } 
}

58
ОП заявило: "Використовуючи jQuery ...", тому здається зайвим ігнорувати це, ні?
BryanH

13
Особисто, якщо я задаю конкретне питання, я хотів би отримати відповідь на питання замість іншого способу.
vitto

18
Іноді відповідь, яку ви шукаєте, не така, яку ви очікуєте.
MrBoJangles

5
Незалежно від того, він попросив jQuery, і відповідь на jQuery трохи простіше зрозуміти, особливо якщо хтось не розуміє базовий JavaScript.
shmeeps

6
Відмінний спосіб зробити це, іноді базовий JavaScript може бути дуже зручним!
Hallaghan

13

Це питання давнє і має багато поглядів, тому я просто викину туди деякі речі, які допоможуть певним людям.

Щоб перевірити, чи є у вибраного елемента вибрані елементи:

if ($('#mySelect option:selected').length > 0) { alert('has a selected item'); }

або перевірити, чи не вибрано у вибраному:

if ($('#mySelect option:selected').length == 0) { alert('nothing selected'); }

або якщо ви знаходитесь у певному циклі і хочете перевірити, чи вибрано поточний елемент:

$('#mySelect option').each(function() {
    if ($(this).is(':selected')) { .. }
});

щоб перевірити, чи не вибрано елемент під час циклу:

$('#mySelect option').each(function() {
    if ($(this).not(':selected')) { .. }
});

Це кілька способів зробити це. jQuery має багато різних способів досягнення однієї і тієї самої речі, тому ви зазвичай просто вибираєте, який з них виявиться найбільш ефективним.


"не" не працював для мене $ ('# mySelect option'). every (function () {if ($ (this) .not (': вибрано')) {..}}); Тож використане заперечення на начебто if (! $ (This) .is (': вибрано')) {..} Браузер: Chrome; Версія Jquery: 3.1.1
Anil kumar

12

Відповідь lencioni - це те, що я рекомендував би. Ви можете змінити селектор для ('#mySelect option:last')вибору параметра з конкретним значенням, використовуючи " #mySelect option[value='yourDefaultValue']". Детальніше про селектори .

Якщо ви широко працюєте зі списками вибору клієнта, перегляньте цей плагін: http://www.texotela.co.uk/code/jquery/select/ . Подивіться на джерело, якщо ви хочете побачити ще кілька прикладів роботи зі списками вибору.


9

Ось моя функція зміни вибраного параметра. Він працює для jQuery 1.3.2

function selectOption(select_id, option_val) {
    $('#'+select_id+' option:selected').removeAttr('selected');
    $('#'+select_id+' option[value='+option_val+']').attr('selected','selected');   
}

7
<script type="text/javascript"> 
$(document).ready(function() {
  if (!$("#mySelect option:selected").length)
   $("#mySelect").val( 3 );

});
</script>




2

Це був швидкий сценарій, який я виявив, що працював ... .Результат присвоюється мітці.

$(".Result").html($("option:selected").text());

1

Ви, хлопці, занадто багато робите для вибору. Просто виберіть за значенням:

$("#mySelect").val( 3 );

2
Це вибір варіанту 3 незалежно від того, чи вже вибрано інший варіант.
Джордан Райан Мур


1

Я знайшов хороший спосіб перевірити, чи вибрано параметр і вибрати за замовчуванням, коли це не так.

    if(!$('#some_select option[selected="selected"]').val()) {
        //here code if it HAS NOT selected value
        //for exaple adding the first value as "placeholder"
        $('#some_select option:first-child').before('<option disabled selected>Wybierz:</option>');
    }

Якщо для параметра #some_select не вибрано типовий параметр, то .val () не визначено



0
$("#select_box_id").children()[1].selected

Це ще один спосіб перевірки обраної опції чи ні в jquery. Це поверне булеві (правдиві чи помилкові).

[1] - індекс опції поля вибору


0

Змініть подію у полі вибору для запуску, і як тільки це стане, просто витягніть атрибут id вибраного параметра: -

$("#type").change(function(){
  var id = $(this).find("option:selected").attr("id");

  switch (id){
    case "trade_buy_max":
      // do something here
      break;
  }
});

0

Я просто шукав щось подібне і виявив таке:

$('.mySelect:not(:has(option[selected])) option[value="2"]').attr('selected', true);

Це знаходить усі вибрані меню класу, у яких ще немає опції, і вибирає параметр за замовчуванням ("2" у цьому випадку).

Я спробував використовувати :selectedзамість [selected], але це не спрацювало, оскільки щось завжди вибирається, навіть якщо нічого не має атрибута


0

Якщо вам потрібно чітко перевірити кожен параметр, щоб побачити, чи є у них "вибраний" атрибут, ви можете це зробити. Інакше за допомогою option:selectedви отримаєте значення для першого параметра за замовчуванням.

var viewport_selected = false;      
$('#viewport option').each(function() {
    if ($(this).attr("selected") == "selected") {
        viewport_selected = true;
    }
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.