2013-05-25 4 views
1

я застрял с этим вопросом в течение почти один день ...выберите тег: первый вариант выбран по умолчанию

Простой список выбора, который выглядит следующим образом:

 <select id="slide_number"> 
      <option value="slide_1">Slide 1</option> 
      <option value="slide_2">Slide 2</option> 
      <option value="slide_3">Slide 3</option> 
      <option value="slide_4">Slide 4</option> 
     </select> 

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

$('#slide_number').change(function() { 
     $('#slide_number option:selected').removeAttr('selected'); 
     $('#slide_number :selected').each(function() { alert($(this).find('#slide_number :selected')) }); 
     $("#slide_number option[value='slide_" + _t._current_slide + "']").attr('selected',''); 
    }); 

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

На iPad в Safari я увидел, что, когда я выбираю вариант 3, он одновременно подписывает вариант 1 и вариант 3, и это то, что, по моему мнению, вызывает проблему, но я не могу избавиться от этого автоселекта 1 вариант:/

Я добавил это предупреждение, и это показывает, что даже после удаления выбранного атрибута, вариант 1 по-прежнему выбран :(

Спасибо за ваше время и идеи ...

+0

Пожалуйста, объясните логику использования этого кода '$ (" # slide_number option [value = 'slide_ "+ _t._current_slide +"'] ") .attr ('selected', '');'. –

+0

и что вы хотите получить/сделать в событии 'change'? –

+0

Это выбирает правый слайд из списка по значению. Когда я поворачиваю направо, я меняю номер _current_slide, и я запускаю $ ('# slide_number) .trigger (' change '), чтобы он обновлял список. Изменение события просто изменяет выбранный атрибут в списке на текущий. То, что я увидел, это когда я добавляю несколько = 'несколько' в тег select, все работает хорошо, только сам выбор меняет на список, который мне не нужен – SuddenHero

ответ

0

Попробуйте это используя jQuery v1.9.1 +

$('#slide_number').change(function() { 
    $("option[value='slide_" + _t._current_slide + "']", this).prop('selected', true); 
    $(':selected', this).each(function() { 
     alert($(this).text()); 
    }); 
}); 
+1

Что это за волшебство! Зачем вместо априори выступать? – SuddenHero

+0

** Перед jQuery 1.6 ** метод '.attr()' иногда учитывал значения свойств при извлечении некоторых атрибутов, что может привести к непоследовательному поведению. ** Начиная с jQuery 1.6 ** метод ['.prop()'] (http://api.jquery.com/prop/) обеспечивает способ явного извлечения значений свойств, в то время как '.attr()' извлекает атрибутов. –

+1

Большое вам спасибо! – SuddenHero

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