【问题标题】:Google Chrome - $('#staylength').val(my_min); fails谷歌浏览器 - $('#staylength').val(my_min);失败
【发布时间】:2010-06-19 16:21:22
【问题描述】:

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(WinXP 上为 5.0.375.55)中,以下 jquery 代码无法设置 staylength 的值。

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

但同样的,当从谷歌浏览器中的 javascript 控制台运行时,是成功的。怎么了?

编辑
这是违规页面: 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);
}

【问题讨论】:

  • 我很难阅读你的代码...你能陪我去哪里调用日历/日期选择器吗?
  • 真的没有必要调用“parseInt(j)”。也许这只是为了测试我猜想的一些代码。

标签: jquery google-chrome


【解决方案1】:

更新

问题是这一行:

var my_min = min_stay[i] + 1;

min_stay 是一个字符串数组,因此这会导致“31”,而不是您想要的 4(并且“31”在列表中的值之外,导致它默认返回到第一个 @ 987654325@),您需要在响应中返回一个整数数组,而不是这样:

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

或者,像这样使用parseInt()

var my_min = parseInt(min_stay[i], 10) + 1;

【讨论】:

  • 正如我在上面的评论中解释的那样,这不是原因。
  • @Majid - 试试alert($('#staylength').length),你会得到什么?
  • @Majid - 将其设置为 3、3、1 然后 31,让我看看为什么在逻辑中....val() 工作正常,但 31 不是有效值。
  • @Nick Craver: alert($('#staylength').length) 返回 1。不应该为 sn-p 返回 5,为实际页面返回 14?
  • @Majid 没有“长度”,只有“#staylength”选择器匹配的元素数量。我没有在该页面中看到您正在谈论的代码。尝试设置选择器值的代码在哪里?这在 Firefox 中有效吗?
【解决方案2】:

尝试使用字符串而不是数字。

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

【讨论】:

  • 根据 Sarfraz Ahmed 的建议,我尝试了 $('#staylength').val('' + my_min);,它的作用相同,但问题仍然存在。
  • 这不会有任何区别。
【解决方案3】:

试试

$('#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);
}

【讨论】:

  • 这也是个好主意。事实上,他可以直接在他正在构建的 HTML 中添加“selected”!
  • 看我的回答,这不是问题......这是写$('#staylength').val(my_min);真的漫长的方式,实际上你更长的方式更容易出错,如果我的my_min = '][' 怎么办?
  • 酷尼克!谢谢!..你真的很擅长这些东西......我从你身上学到了很多......
猜你喜欢
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多