document.registerElement 扩展了 HTMLInputElement 原型,同时使用自定义标记名称
document.registerElement extending HTMLInputElement prototype while using custom tag name to avoid implicit browser style
我的目标是双重的:
-
显示一个 HTML 元素,该元素跟踪其"已检查"状态并触发"更改"事件,而无需自己手动实现该代码。
-
不要与浏览器对元素的隐式样式作斗争,
-webkit-appearance: none
和更大惊小怪。
我只需要支持谷歌浏览器当前稳定的频道。因此,我不太关心与非现代浏览器的兼容性。
我已经通过使用document.registerElement解决了这个问题。使用此方法,我注册一个新标签 custom-checkbox
,并通知浏览器我希望此标签从输入继承。
从那里,我需要设置此输入的类型为复选框的事实。为此,我在创建 HTML 元素时运行的 createdCallback
方法中设置了其类型。
此代码存在一些问题:
-
当我不使用自定义标签而是利用
is
属性通知浏览器输入"是"custom-checkbox
时,它有效。但是,使用<input>
标记会导致浏览器接管元素的样式。我不希望这种情况发生。 -
使用自定义标记时,不会运行
createdCallback
方法。因此,该元素不会设置它是一个复选框的事实,并且在单击时不会触发"更改"事件。
我错过了什么?
var proto = Object.create(HTMLInputElement.prototype);
proto.createdCallback = function() {
console.log('createdCallback has ran for: ', this);
this.type = "checkbox";
};
document.registerElement("custom-checkbox", {
prototype: proto,
extends: 'input'
});
$('.custom-checkbox').change(function() {
console.log('change event handler has ran for:', this);
});
.custom-checkbox {
width: 100px;
height: 100px;
background-color: red;
display: inline-block;
}
<custom-checkbox class="custom-checkbox"></custom-checkbox>
<input is='custom-checkbox' class="custom-checkbox">
我可以复制您的问题,即在使用HTML
声明的页面上插入<custom-element>
标签时,createdCallback
方法不会触发。我使用的是 Chrome 版本 39.0.2171.99
我相信这是因为当我的<custom-element>
被渲染时,事件侦听器createCallback
没有绑定。
请记住,自定义元素还不是定义的标准(请参阅此处(
但是,使用 Polymer 为我解决了这个问题,在 HTML
中使用自定义标签确实触发了 Polymer 所说的create
事件/回调。
我建议你使用聚合物,它有更好的浏览器支持。
- 表达式引擎扩展开发-向呈现的条目添加自定义javascript
- 扩展 ACE 编辑器,如何导入自定义文件
- 正在Angular 2中的扩展RouterOutlet中导入自定义服务以进行身份验证
- 如何使用ngModel将自定义控件的提供程序扩展器分离到Angular 2中的单独文件中
- 在 Chrome 扩展程序中创建自定义事件的最惯用方式
- 在自定义元素中扩展 HTMLCanvasElement 问题
- 按钮不'不能在自定义镀铬扩展中工作
- 如何使用jQuery扩展方法为元素或类选择器创建自定义插件
- 使用自定义断言帮助程序对cli扩展assert进行ember-cli扩展
- 如何在mozilla firefox扩展中更改自定义工具栏按钮的颜色
- 在PhpStorm中创建自定义语言,扩展所有html语言功能
- 如何使用子上下文可访问的自定义属性扩展模板绑定语法
- Chrome扩展-在全屏视频顶部显示自定义通知/弹出窗口(HTML元素)
- 用户扩展中的自定义命令.js启动 Selenium RC 时无法加载
- 如何使用自定义查询方法扩展水线
- 自定义镶边扩展程序中的挂钩窗口属性
- Javascript子类化,超级构造函数和使用自定义扩展会丢失基类方法
- 如何写自定义扩展谷歌地图在一个干净的方式
- 响应自定义扩展预览
- 如何在中型编辑器中自定义扩展