为什么javascript在我的select选项中看不到“selected”属性?

时间:2010-12-02 11:22:39

标签: javascript html

简短版:

使用AJAX调用将带有选项的select元素插入DOM后,JavaScript无法识别我选项中的“selected”属性。好像它不在那里,即使在Firebug中查看它我也能看到它。

长版:

我正在使用一个jQuery插件,它基于具有“selected”属性的选项的实际html选择生成“多选”(几乎选择模仿复选框)。插件通过执行

检查所选属性是否存在
$(this).attr('selected') == true

如果它存在,则将相应的复选框设置为选中。当我正常加载页面时,这一切都有效。如果用户选择过滤数据,我还需要重新加载数据,这就是问题所在。新数据通过AJAX获取,插件重新应用于新标记,但“选定”属性不被认为存在,即使它就像之前一样。其他属性工作正常,但“选择”奇怪的是没有。这是标记在工作时和不工作时的标记。

<option value="1" selected="selected" warning="true"> text</option>

我真的很想过这个。有人有建议吗?

5 个答案:

答案 0 :(得分:2)

一般忘记jQuery令人困惑的attr()方法和属性,而只是使用该选项的selected属性,这是一个布尔值,适用于自1996年以来发布的所有主流浏览器:

// Assuming the select list is stored in a variable called select
alert( select.options[0].selected );

如果你必须使用jQuery来获得选项,这里是等价的:

alert( $(this)[0].selected );

属性几乎不是你想要的,因为它们在IE中被错误地实现,并且只代表元素某个方面的初始值,而不是当前值。 jQuery的attr()方法通常在内部使用属性。

答案 1 :(得分:1)

为什么要与true进行比较? "selected"值为"selected",而非true

答案 2 :(得分:1)

您获取的元素选择= = True但选中的元素实际上是“已选中”。

答案 3 :(得分:0)

检查是否选择了某个选项的更好方法是键入以下内容:

if ($(this).is(":selected")) {
 ...
}

因此,如果您想检测所有可以使用的选项:

$(“select option:selected”)。each(function(){   ... });

也许,这解决了这个问题。

答案 4 :(得分:0)

我弄清楚问题是什么。我们使用js组合器,显然将include调用移动到另一个文件来修复问题。