简短版:
使用AJAX调用将带有选项的select元素插入DOM后,JavaScript无法识别我选项中的“selected”属性。好像它不在那里,即使在Firebug中查看它我也能看到它。
长版:
我正在使用一个jQuery插件,它基于具有“selected”属性的选项的实际html选择生成“多选”(几乎选择模仿复选框)。插件通过执行
检查所选属性是否存在$(this).attr('selected') == true
如果它存在,则将相应的复选框设置为选中。当我正常加载页面时,这一切都有效。如果用户选择过滤数据,我还需要重新加载数据,这就是问题所在。新数据通过AJAX获取,插件重新应用于新标记,但“选定”属性不被认为存在,即使它就像之前一样。其他属性工作正常,但“选择”奇怪的是没有。这是标记在工作时和不工作时的标记。
<option value="1" selected="selected" warning="true"> text</option>
我真的很想过这个。有人有建议吗?
答案 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调用移动到另一个文件来修复问题。