Как установить выбранное значение для нескольких входов Select с помощью jQuery?

У меня есть 2 выбранных входа, и я заполняю их массивом лет. После этого я хочу установить currentYear выбранное значение для каждого Select. У меня есть этот код, но он работает только с первым выбором. Я не понимаю, почему.

ИЗМЕНИТЬ 2

Все отлично работает с jQuery 1.4.3, 1.4.2 не работает :_(

ИЗМЕНИТЬ

Я пытаюсь это безуспешно :-( только первый выбрал значение OK. Может быть проблема в версиях? IE6, asp.net 2.0, jquery 1.4.2. Например, "$(sinceComboSelector).val(currentYear); " не работает, я должен сделать "$('#cmbAnyDesde option[value=' + currentYear + ']').attr('selected', 'selected');" :-(

Код обновлен:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Tests.aspx.cs" Inherits="Tests" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="../JAVASCRIPT/jquery-1.4.2.min.js" type="text/javascript"></script>
</head>
<body>
    <script type="text/javascript">
        $(document).ready(function() {
            loadYears();
        });
        var loadYears = function() {
            var currentYear = new Date().getFullYear(),
                years = [],
                firstYear = currentYear - 7,
                lastYear = currentYear + 3,
                sinceComboSelector = "#cmbAnyDesde",
                toComboSelector = "#cmbAnyHasta",
                i;

            for (i = firstYear; i <= lastYear; i++) {
                years.push(i);
            }

            $(sinceComboSelector).find('option').remove();

            $(toComboSelector).find('option').remove();

            $.each(years, function(key, value) {
                $(sinceComboSelector)
                  .append($("<option></option>")
                  .attr("value", value)
                  .text(value));

                $(toComboSelector)
                  .append($("<option></option>")
                  .attr("value", value)
                  .text(value)); ;
            });

//            $(sinceComboSelector).val(currentYear);
//            $(toComboSelector).val(currentYear);
            $('#cmbAnyDesde option[value=' + currentYear + ']').attr('selected', 'selected');            
            $('#cmbAnyHasta option[value=' + currentYear + ']').attr('selected', 'selected');
        }; 
    </script>
    <form id="form1" runat="server">
    <div>
        <select id="cmbAnyDesde" style="width:70px"></select>
        <select id="cmbAnyHasta" style="width:70px"></select>
    </div>
    </form>
</body>
</html>

Спасибо


person rubdottocom    schedule 26.10.2010    source источник
comment
Я не уверен, в чем ваша проблема, но имейте в виду, что if ($('#cmbAnyHasta)) { всегда будет проходить. Вместо этого используйте $('#cmbAnyHasta').length.   -  person lonesomeday    schedule 26.10.2010
comment
ок, спасибо буду иметь в виду   -  person rubdottocom    schedule 26.10.2010
comment
Есть ли какие-либо ошибки javascript на странице, которые могут дать подсказку, почему она не работает? Если я просто помещу ваш javascript на тестовую страницу с парой html-боксов с правильным идентификатором, то он будет работать отлично: jsfiddle.net/XmPas . Кажется очевидным, что проблема не в том, что вы вставили сюда. Возможно, вырежьте фрагменты вашей страницы, чтобы попытаться сформировать минимальный тестовый пример. Скорее всего, что-то, что вы вырезали, заставит это начать работать, и тогда вы сможете понять, почему (или спросите нас, если у вас есть дополнительная информация).   -  person Chris    schedule 26.10.2010
comment
Вау! Я не знал о Fiddle, я тестировал разные версии jQuery и обнаружил, что 1.4.2 терпит неудачу, но 1.4.3 работает отлично. Большое спасибо   -  person rubdottocom    schedule 26.10.2010
comment
любой вопрос, который заканчивается тем, что другой человек знает о JSFiddle, является хорошим вопросом. ;-)   -  person Chris    schedule 26.10.2010


Ответы (1)


Я тестировал здесь с этим кодом выше и работает:

$(document).ready(function (){

  loadYears();

});

var loadYears = function () {
  var currentYear = new Date().getFullYear(),
    years = [],
    firstYear = currentYear - 7,
    lastYear = currentYear + 3,
    sinceComboSelector = "#cmbAnyDesde",
    toComboSelector = "#cmbAnyHasta",
    i;

  for (i = firstYear; i <= lastYear; i++){
    years.push(i);
  }

  $(sinceComboSelector).find('option').remove();

  $(toComboSelector).find('option').remove();

  $.each(years, function(key, value) {
    $(sinceComboSelector)
      .append($("<option></option>")
      .attr("value", value)
      .text(value));

    $(toComboSelector)
      .append($("<option></option>")
      .attr("value", value)
      .text(value)); ;
  });

  $(sinceComboSelector).val(currentYear);
  $(toComboSelector).val(currentYear);
};
person szanata    schedule 26.10.2010
comment
Я очень новичок в javascript и jQuery, и я не уверен, что вы хотите, чтобы я сделал :( мой текущий код находится в «нормальной» функции и вызывается внутри $(document).read недостаточно? - person rubdottocom; 26.10.2010
comment
Он уже заключен в анонимную функцию, которая передается в ready(). - person MattC; 26.10.2010
comment
Да, если вы используете $(document).ready(function (){ }); ты прав. - person szanata; 26.10.2010
comment
u_u Проблема осталась, может проблема в версиях? Я упростил код (JS на той же странице, полная копия/вставка из madeinstefano ^^u), я обновил код, но не работает :-S - person rubdottocom; 26.10.2010
comment
ОМФГ! jQuery 1.4.2 терпит неудачу, но 1.4.3 прекрасно работает ›_____‹ но когда и как! Хорошо, спасибо всем :-D теперь работает - person rubdottocom; 26.10.2010
comment
Я скопировал весь код вашей страницы, затем создал файл .html, поместил в него код, и он работает. Вы уверены, что jquery действительно находится в этой папке? - person szanata; 26.10.2010
comment
Если вы выполните в Fiddle и измените jquery с 1.4.3 на 1.4.2, вы увидите мою ошибку: -S jsfiddle.net /XмПас - person rubdottocom; 26.10.2010