我正在尝试在获取需要选择的选项值后,通过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);
}
答案 0 :(得分:9)
您可以使用val()设置select
元素的值。
更改
$("#mymenu option[value='"+data+"']").attr('selected', 'selected');
到
$("#mymenu").val(data);
另一种解决方案是使用prop()。 attr()方法用于设置元素的属性值,而不是设置属性。
$('#mymenu option[value="5"]').prop('selected', true)
您可以详细了解attr vs prop以及jQuery 1.6 release note
答案 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>
所以,这个故事的道德:似乎你还必须考虑你选项名称中的第一个字母。