jquery选项选择不在chrome中工作

时间:2013-03-04 05:37:16

标签: jquery google-chrome select option

我正在尝试在获取需要选择的选项值后,通过jquery自动选择选项。但是它无法在Chrome中运行。它在firefox和IE 9中工作。为什么会这样?函数填充是填充值的函数。 (函数res,仅重置由函数填充填充的值,对此问题不重要)

function fill(thisValue) {
    $('#inputString').val(thisValue);
    $.post("get.php?op=category", {queryString: ""+thisValue+""}, function(data){
            if(data.length >0) {
                $("#mymenu option[value='"+data+"']").attr('selected', 'selected');
                $('#mymenu').attr("disabled","disabled");
            }
        });
    $.post("get.php?op=name", {queryString: ""+thisValue+""}, function(data){
            if(data.length >0) {
                $('#nameString').val(data);
                $('#nameString').attr("disabled","disabled");
            }
        });
    $.post("get.php?op=author", {queryString: ""+thisValue+""}, function(data){
            if(data.length >0) {
                $('#authorString').val(data);
                $('#authorString').attr("disabled","disabled");                 
            }
        });
    $.post("get.php?op=publisher", {queryString: ""+thisValue+""}, function(data){
            if(data.length >0) {
                $('#publisherString').val(data);
                $('#publisherString').attr("disabled","disabled");
            }
        });


    setTimeout("$('#suggestions').hide();", 200);
}

function res(inputString) {
$('#publisherString').attr("disabled", false);
$('#publisherString').val('');
$('#nameString').attr("disabled",false);
$('#nameString').val('');
$('#authorString').attr("disabled",false);
$('#authorString').val('');
$('#mymenu').attr("disabled",false);
$('#mymenu option').attr('selected', false);
}

3 个答案:

答案 0 :(得分:9)

您可以使用val()设置select元素的值。

更改

$("#mymenu option[value='"+data+"']").attr('selected', 'selected');

$("#mymenu").val(data);

Demo Fiddle

另一种解决方案是使用prop()attr()方法用于设置元素的属性值,而不是设置属性。

$('#mymenu option[value="5"]').prop('selected', true)

您可以详细了解attr vs prop以及jQuery 1.6 release note

Demo Fiddle

答案 1 :(得分:0)

当您在下面的语句中使用拼写错误的数据时,看起来val不起作用。我花了一段时间才注意到。

$("#mymenu").val(data);

答案 2 :(得分:0)

这里有一些关于您在选项标签中设置的名称的注意事项。我将使用我的代码作为示例。你看到下面的蓝色和黑色在哪里?

<option value="b">Blue</option>
<option value="k">Black</option>

我们现在选择Blue。如果你按下字母&#39; B&#39;在键盘上(区分大小写并不重要)无论如何都不会改变。即使您有一个应该设置值的onkeydown事件,例如:

也是如此
$(function () {
    // Set the value on key down
    $("select[id=stoneColor1]").on("keydown", function(e) {

        var key = String.fromCharCode(e.keyCode);
        for (var i=0; i<stoneColorOptions.length; i++) {
            if (stoneColorOptions[i].keyPress == key) {
                $("#stoneColor1").val(key.toLowerCase());
                break;
            }
        }
    });
});

回想一下,如果我有

,上面的代码将不起作用
<option value="b">Blue</option>
<option value="k">Black</option>

然而,当我有

时它会工作
<option value="b">(B) Blue</option>
<option value="k">(K) Black</option>

所以,这个故事的道德:似乎你还必须考虑你选项名称中的第一个字母。