【问题标题】:Selecting a select option by a value passed through a variable通过变量传递的值选择选择选项
【发布时间】:2012-07-01 21:21:45
【问题描述】:

我有一个包含以下代码的 html 文件:

<select id="gouv" name="gouv">
...some options here...
</select>

以及下面的 jQuery 代码:

$('#gouv option[value="myvalue"]').attr("checked","checked");

您当然知道这会将值为“myvalue”的选项设置为检查哪个完美运行。

现在的问题是,我不知道要设置为已选中的选项的值,因为该值是存储在全局变量中的某个函数的结果。为了简单起见,经过长时间的调试,我将问题简化为:

var ident="myvalue";
$('#gouv option[value=ident]').attr("checked","checked");

这个代码不起作用!

我想知道为什么它不起作用,我们不能将值作为变量传递吗?有什么解决方法吗?

【问题讨论】:

  • 你试过$('#gouv').val(ident) 吗? jQuery的.val()应该可以设置一个select的值。
  • @MarkEirich。 val 有什么关系?
  • .val(value) 设置选择的值。这不是你想要的吗?
  • @MarkEirich。阅读我的回答,不。 :)
  • 嗯...$('#gouv').val(ident) 应该和$('#gouv option[value="' + ident + '"]').attr("selected", "selected"); 做同样的事情你试过了吗?

标签: jquery select option


【解决方案1】:
var ident="myvalue";
$('#gouv option[value="' + ident + '"]').attr("selected", "selected");

selected 用于&lt;option&gt;checked 用于无线电!

如果您的 jQuery 版本 > 1.6,最好使用 prop

$('#gouv option[value="' + ident +'"]').prop("selected", true);

请注意,您最好使用filter 而不是属性选择器:

$('#gouv option').filter(function(){
    return this.value == indent;
}).prop("selected", true);

Why you should use filter for value

如果你需要支持黑莓,他们有 jQuery 处理的 option.value 的错误:

$('#gouv option').filter(function(){
    return $(this).val() == indent;
}).prop("selected", true);

【讨论】:

  • 非常感谢,现在我觉得自己像个白痴,我以前用过这个,完全忘记了。感谢您检查/选择的评论,这只是写这篇文章时的一个错误。我的 jQuery 版本很旧,所以不支持 prop。你能告诉我为什么使用过滤器更好吗?再次非常感谢。
  • @IlyesFerchiou。我回答的其他问题有一个链接,无需再次复制。你读了吗?
  • 不,我没有,我会尝试寻找它。再次感谢。只要网站允许,我就会将答案设置为已接受。
  • @Ilyes 改用.val(),正如马克在他的回答中所建议的那样。 Gdoron 的方式有效,但是当.val() 以完全相同的方式工作时,它需要很长的路要走。
  • @JamWaffles。是的,他的回答更好。 (虽然我的应该快一点——所以我相信)
【解决方案2】:

jQuery 的.val() (see here) 将按值选择一个选项:

var ident = "myvalue";
$('#gouv').val(ident);

这相当于:

var ident = "myvalue";
$('#gouv option[value="' + ident + '"]').attr("selected", "selected");

如果ident 包含任何双引号,后者会出现问题。

【讨论】:

  • 好吧,这也有效,即使我不明白如何,我认为在这种情况下 value 将返回所有 SELECT 元素的值 ident 而不是所有 OPTION 元素!但问题是,即使更长,第一个选项对双引号也没有问题,如果字符串有双引号,我一开始就无法将其设置为变量,我将不得不在设置时转义引号变量,接下来就没有问题了。
  • 非常感谢您的回答,它肯定更简单,但我的问题首先是关于为什么我不能按照我的意图使用变量,而 gdoron 回答得很好,我希望我可以设置 2 个选择的答案,但我不能,所以我会给你一个 +1 并再次感谢你花时间给我这个更简单的解决方案。
  • 谢谢你,我做到了,这就是它应该如何工作的,但我显然对这个功能有误解。再次感谢!
【解决方案3】:

我尝试了上述所有答案,(它们毫无疑问是正确的)但它们对我不起作用不知道原因,不知何故我发现以下一行代码很容易工作,我的下拉值是'不会改变前视图,即使当我点击下拉选择时它会改变..所以对我来说解决方案是

$('#nights').show().focus().click();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多