7

在获取需要选择的选项值后,我试图通过 jquery 自动选择选项。但是它在 Chrome 中不起作用。它在 Firefox 和 IE 9 中工作。为什么会这样?函数 fill 是填充值的函数。(函数res,只重置函数fill填充的值,对这个问题不重要)

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);
}
4

3 回答 3

12

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

改变

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

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

演示小提琴

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

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

您可以阅读有关attr 与 prop的更多信息,以及jQuery 1.6 发行说明

演示小提琴

于 2013-03-04T06:06:07.830 回答
0

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

$("#mymenu").val(data);
于 2013-12-10T14:28:25.010 回答
0

这是我刚刚注意到的关于您在选项标签中设置的名称的一些内容。我将以我的代码为例。你看到下面写着蓝色和黑色的地方了吗?

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

假设当前选择了蓝色。如果您按键盘上的字母“B”(区分大小写无关紧要),无论如何它都不会改变。即使您有一个应该设置值的 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>

所以,是的,故事的寓意:似乎您还必须考虑选项名称中的第一个字母。

于 2015-10-29T18:08:42.560 回答