在具有CONTENT标记的自定义元素中使用SELECT标记时出现问题
Problems using a SELECT tag in a custom element with a CONTENT tag
下面是显示行为的jsfiddle。
我希望能够将option
元素拉入Shadow DOM中的插入点,但由于select
是空的,我认为这不会发生。无论如何,Chrome检查器对插入点没有太大帮助,但我已经验证了我的浏览器在执行其他插入点操作时可以工作,例如,在select
中插入option
元素之外的任何操作。
我定义了一个自定义元素:
var CatpantsProto = Object.create(HTMLElement.prototype);
CatpantsProto.createdCallback = function(e) {
var shadow = this.createShadowRoot();
var t = document.getElementById('guy');
var clone = document.importNode(t.content, true);
shadow.appendChild(clone);
};
document.registerElement('cat-pants', {
prototype: CatpantsProto
});
这是#guy
模板:
<template id="guy">
<span>Before</span>
<select>
<content></content>
</select>
<span>After</span>
</template>
以下是用法:
<cat-pants>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</cat-pants>
同样,我希望这些option
元素被插入到ShadowDOM中的select
中,但当我打开下拉列表时,它们没有显示出来。
我认为从HTMLElement
"派生"可能是个问题,但如果我实现HTMLSelectElement
,它也不起作用。
我还尝试过不使用模板,直接修改shadow
的innerHTML
,但也不起作用。
我目前的想法是,option
元素在select
s、datalist
s或optgroup
s之外是无效的,浏览器正在进行某种调整,但没有告诉我这一点。
我不知所措,可能会通过创建第二个item
元素占位符来解决这个问题,该占位符将在我的createdCallback
中转换为option
元素。啊。
不可能使用该类型的元素创建Shadow Root,因为浏览器本身会创建自己的(用户代理)Shadow DOM来显示选择控件。
如果是这样,你会得到以下错误:
未能对"Element"执行"createShadowRoot":作者已创建该元素的影子根被禁用。
相反,您应该扩展<select>
元素本身,或者使用Javascript直接复制<option>s
(而不是通过<content>
方式)。
相关文章:
- 在具有CONTENT标记的自定义元素中使用SELECT标记时出现问题
- Ember.Select的奇怪问题
- 寻找 Web 组件来解决这个问题(可能是 SELECT 或不知道)
- Select上通过Ajax将Javascript变量传递到PHP文件中的问题
- 使用jquery select all选项发出问题
- 使用Angular.js和PHP在select下拉列表中获取问题
- 使用jquery清除select字段,但呈现问题
- HTML & lt; select>焦点问题:使用Firefox需要2次点击来选择一个<选项>
- select .js关于无结果插件和允许默认链接行为的问题
- AJAX和Select的问题
- 在select元素上使用jQuery更改函数时出现问题
- & lt;销售:select>使用默认选项为空时,下拉问题
- 在SELECT字段中动态加载内容的问题[ANGULAR JS]
- Angular js中ng- select的问题
- AngularJS的ng-select和ng-switch-when问题
- Javascript表单验证问题(<SELECT>标记)
- 使用按钮时select中的AngularJS验证问题,但使用跨度时没有
- 关于使用jQuery连接两个Select Options val()的问题
- sqlite中select查询的循环问题
- 基于SELECT选项显示一个元素和隐藏其他元素时出现问题