[英]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.