繁体   English   中英

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

[英]Why does javascript not see the “selected” attribute on my select option?

简洁版本:

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

长版:

我正在使用一个jQuery插件,该插件基于实际的html select生成可以具有“ selected”属性的选项,从而生成“ multi select”(非常类似于带复选框的select模仿)。 插件通过执行以下操作检查所选属性是否存在

$(this).attr('selected') == true

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

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

我真的为此挠头。 有人有建议吗?

一般情况下,不要使用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()方法通常在内部使用属性。

你为什么要与true比较? "selected"值是"selected" ,不是true

您获得的元素在其中Selected == True但已选定的地方实际上是“已选定”。

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

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

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

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

也许,这可以解决问题。

我发现了问题所在。 我们使用了一个js组合器,并且显然将include调用移到了另一个文件,从而解决了该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM