Google Chrome - $ ('# staylength'). Val (my_min); терпит неудачу - PullRequest
0 голосов
/ 19 июня 2010

HTML:

<select id="staylength" name="staylength">
  <option disabled="disabled" value="1">1</option>
  <option disabled="disabled" value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
</select>

В Google Chrome (5.0.375.55 на WinXP), следующий код jquery не может установить значение staylength.

var my_min = 3;
$('#staylength').val(my_min);

Но то же самое при запуске из консоли javascript в Google Chrome проходит успешно. Что случилось?

Редактировать
Вот оскорбительная страница: http://dv2.makestay.com/node/1

Чтобы воспроизвести ошибку, выберите либо «06/21/2010», либо «06/22/2010» в качестве даты регистрации. Значение, которое не обновляется, находится в Nights select.

РЕДАКТИРОВАТЬ 2

Это целая функция. Вызывается с параметром, установленным в 3:

function apply_restriction(i) {
    var my_index = parseInt(i);
    var my_option;
    var my_min = min_stay[my_index];
    $('#staylength').html('');
    for (var j=1; j < 15; j++) {
        if (parseInt(j) < parseInt(my_min)) {
            my_option = '<option value="' + j + '" disabled="disabled">' + j + '</option>';
        } else {
            my_option = '<option value="' + j + '">' + j + '</option>';
        }
        $('#staylength').append(my_option);
    }
    $('#staylength').val('' + my_min);
    alert($('#staylength').length);
}

Ответы [ 3 ]

3 голосов
/ 19 июня 2010

Обновлено

Проблема заключается в следующем:

var my_min = min_stay[i] + 1;

min_stay - это массив строк, поэтому в результате получается «31», а не 4, как вы хотите (а «31» находится за пределами значений в списке, в результате по умолчанию возвращается к первому <option>), вам либо нужно вернуть массив целых чисел в вашем ответе, вместо этого:

min_stay.push('3', '3');
//should be:
min_stay.push(3, 3);

или используйте parseInt() как это:

var my_min = parseInt(min_stay[i], 10) + 1;
0 голосов
/ 19 июня 2010

попробуй

$('#staylength option[value='+my_min+']').attr('selected','selected'); 
// instead of $('#staylength').val('' + my_min);

но было бы неплохо, если бы ты сделал это (требование Jquery 1.4)

function apply_restriction(i) {
    var my_index = parseInt(i);
    var my_option;
    var my_min = min_stay[my_index];
    $('#staylength option').each(function(){
        $(this).attr('disabled',function(){
            return this.value < my_min;
        });
    });
    $('#staylength option[value='+my_min+']').attr('selected','selected');
    alert($('#staylength').length);
}
0 голосов
/ 19 июня 2010

Попробуйте использовать строку, а не число.

var my_min = "3";
$('#staylength').val(my_min);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...