选项:选择不工作jquery 1.9

时间:2013-01-16 19:28:07

标签: jquery

以下内容:

  $("select option:contains(fish)").attr('selected', true);

在jQuery 1.9以下的任何东西中运行得非常好,但在jQuery 1.9+中根本不起作用。我一直在搜索有关任何变化的任何文档,但没有找到任何内容。

知道如何让这段代码与新的jquery一起使用吗?

示例此处(默认为jQuery 1.4):http://jsfiddle.net/reigel/TZmEw/

5 个答案:

答案 0 :(得分:17)

使用Prop api代替attr for jquery 1.9。

$("select option:contains(fish)").prop('selected', 'selected');

OR

 $("select option:contains(fish)").prop('selected', true);

原因:jQuery 1.6引入了.prop()方法来设置或获取节点上的属性,并且不推荐使用.attr()来设置属性。但是,高达1.9的版本继续支持在特定情况下使用.attr()。当使用区分属性和属性的选择器时,以向后兼容性名称的这种行为会引起混淆。

来源:http://jquery.com/upgrade-guide/1.9/#changes-of-note-in-jquery-1-9

在Attr Api中提到:从jQuery 1.6开始,.attr()方法为尚未设置的属性返回undefined。此外,.attr()不应用于普通对象,数组,窗口或文档。要检索和更改DOM属性,请使用.prop()方法。

来源:http://api.jquery.com/attr/#entry-longdesc

答案 1 :(得分:1)

$("select option:contains(fish)").attr('selected', 'selected');

答案 2 :(得分:1)

请具体参阅1.9 the jQuery documentation on the topic.attr.prop之间的混淆可能令人困惑,因为我知道没有具体方法可以了解“属性”是什么。对于所有意图和目的,当更改用户可以更改的值时...尤其是布尔值,您应该使用.prop

一个例外是输入值 - 您应该使用.val。同样,使用.val设置<select>元素值可能更好 - 在您的情况下不容易做,但它会更准确。

  

jQuery 1.6引入了.prop()方法来设置或获取节点上的属性,并且不推荐使用.attr()来设置属性。但是,高达1.9的版本继续支持在特定情况下使用.attr()。

答案 3 :(得分:1)

试试这个

$("select option").removeAttr('selected').filter(":contains(fish)").attr('selected', true);

答案 4 :(得分:0)

自jQuery 1.6以来,您应该使用prop

$("select option:contains(fish)").prop('selected', true);

在jQuery 1.6.1中,他们将此功能重新引入attr方法,以实现向后兼容性(人们抱怨)。在1.9 they removed it again中,由于此功能已被弃用了足够长的时间。