jquery selection, если option.value равно чему-либо, пометить выбранное - PullRequest
17 голосов
/ 20 декабря 2011

У меня есть вопрос по выбору jquery. В моем случае, как сопоставить, если option.value равно чему-либо, отметьте для него selected. Онлайн код здесь

повторите код еще раз. Это вызвало Uncaught TypeError: Object #<HTMLOptionElement> has no method 'val', как работать, как моя надежда? Спасибо.

<script type="text/javascript">
$(document).ready(function(){
    var num = 3;
    $("div#selection select.select option").each(function(){
        if((this).val()==num){
            $(this).attr("selected","selected");    
        }
    });
});
</script>
<div id="selection">
    <label>Label1:</label>
    <select class="select">
        <option value="1">V1</option>
        <option value="2">V2</option>
        <option value="3">V3</option>
    </select>
    <label>Label2:</label>
    <select class="select">
        <option value="4">U1</option>
        <option value="5">U2</option>
        <option value="6">U3</option>
    </select>
</div>

Ответы [ 6 ]

19 голосов
/ 20 декабря 2011

Вы сделали опечатку

Вместо (this).val() вы должны использовать $(this).val() в вашем операторе if.this относится к HTMLObject, $(this) относится к объекту jQuery.Поскольку метод .val() является частью инфраструктуры jQuery, его нельзя использовать в HTMLObjects.Но я уверен, что вы знали это, потому что это очень похоже на маленькую опечатку.

Это должно работать:

$(document).ready(function(){
    var num = 3;
    $("div#selection select.select option").each(function(){
        if($(this).val()==num){ // EDITED THIS LINE
            $(this).attr("selected","selected");    
        }
    });
});

Редактировать

Вы можете оптимизировать свой цикл, добавив return false; (break; для ванильных циклов), когда вы нашли свой элемент, чтобы он не продолжал циклировать элементы, пока мы уже «закончили».

Тем не менее, вы должны посмотреть на ответ Никола Пелучетти на более эффективный и понятный код.

17 голосов
/ 20 декабря 2011

У вас есть опечатка, и для того, чтобы установить выбранную опцию, вы должны использовать prop(), а не attr (). в любом случае вы могли бы сделать

var num = 3;
$("div#selection select.select option[value="+num+"]").prop("selected", true);

скрипка здесь http://jsfiddle.net/YRBrp/

EDIT - опечатка, конечно, это то, что указал Тим С., вы должны использовать $(this).val(), а не (this).val()

1 голос
/ 20 декабря 2011

Ваша проблема начинается здесь

$ ("div # selection select.select option "). Each (function () {if ( (this) .val () == num) {

измените его на

$("div#selection select.select").each(function(){
if($(this).val()==num){

и все проблемы будут решены. Возможно, вы захотите изменить.each to .change, если вы думаете о том, чтобы скрипт запускался при каждом изменении выбора.

0 голосов
/ 20 декабря 2011

попробуйте ниже

    $("div#selection select.select").val(num);

если поле выбора является множественным выбором, вы можете попробовать

    $("div#selection select.select option").each(function(){
      if($(this).val()==num){ 
        $(this).attr("selected", true);    
      }
   });
0 голосов
/ 20 декабря 2011

Ваш код работает хорошо. Просто обновите 'this' с помощью $ (this). Если нет других выпадающих списков, вы можете пропустить «div # selection select». как показано ниже.

$(document).ready(function(){
    var num = 3;
    $("select option").each(function(){     
        if($(this).val()==num){
            $(this).attr("selected","selected");    
        }
    });
});
0 голосов
/ 20 декабря 2011

При первом обращении к this это не объект jQuery, а объект DOM, а у объекта DOM нет метода val().Вы должны либо использовать this.value och $(this).val() попробуйте это:

$("div#selection select.select option").each(function(){
        if($(this).val()==num){
            $(this).attr("selected","selected");    
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...