jQuery设置多选菜单选中项未生成selected=selected属性问题求助
问题根因
- HTML属性(attribute,即写在标签上的可见属性)和DOM运行时属性(property,JS内存中存储的节点状态)是两套独立的体系:
selected属于布尔类型的属性,你使用attr("selected", true)实际修改的是DOM节点的运行时property,只会控制页面的视觉选中效果,不会自动同步到HTML标签的selected="selected"属性上。你接入的多选组件仅读取标签上的attribute属性,所以无法识别已选状态。
- jQuery 1.6及以上版本对
attr()和prop()的操作逻辑做了明确拆分:
attr()用于读写HTML标签上的静态属性,prop()用于读写DOM节点的动态运行时状态。你当前的写法会被jQuery内部默认判定为操作property,不会修改标签上的attribute。
修复方案
- 方案一:直接给
attr()传入字符串selected作为属性值,强制写入HTML attribute:
jQuery("#e_docs_jobCheckList_0 option[value=" + tmpId + "]").attr("selected", "selected");
- 方案二:调用原生DOM的
setAttribute方法写入属性,绕过jQuery的逻辑封装:
jQuery("#e_docs_jobCheckList_0 option[value=" + tmpId + "]")[0].setAttribute("selected", "selected");
- 方案三:如果批量操作多个选项,可在所有选中状态设置完成后,调用第三方多选组件的刷新方法重新读取状态(不同组件方法名可能有差异,以组件文档为准):
// 以常用的jQuery MultiSelect组件为例 jQuery("#e_docs_jobCheckList_0").multiSelect('refresh');

内容的提问来源于stack exchange,提问作者djcamo
相关产品推荐
相关产品推荐

