【发布时间】:2014-12-15 13:56:55
【问题描述】:
我正在尝试使用 JavaScript 实现与 this 相同的代码,因此将以下代码编写为 btn.js 文件:
// Create a new object based of the HTMLElement prototype
var SaveBtn = Object.create(HTMLElement.prototype);
// Set up the element.
SaveBtn.createdCallback = function() {
// Create a Shadow Root
var shadow = this.createShadowRoot();
this.type='button';
// Add an event listener to the image.
this.addEventListener('click', function(e) {
alert('got a click');
document.getElementById("ShowButton").value= "Hide Filter";
});
};
// Register the new element.
var Xbtn =document.registerElement('save-button', {
prototype: SaveBtn,
extends: 'input'
});
并在另一个函数 main.js 中调用它,如下所示:
window.addEventListener("load", onLoad, false);
function onLoad() {
var host = document.querySelector('#host');
var el = new Xbtn();
host.appendChild(el);
}
这很好,给了我毯子按钮。
现在我想将要显示的“文本”传递到按钮中,我尝试了以下方法:
在我的 index.html 中:
<div id="host"></div>
<input id="ShowButton" type="button" value="Show Filter"/>
在 main.js 中:
el.value = 'click me';
在 btn.js 中:
this.value = this.getAttribute('text');
但是失败了,按钮还是空的!考虑到其他按钮的值在点击时发生变化
有什么想法吗?
【问题讨论】:
-
您为什么希望
el.text在按钮上显示测试?这不适用于普通按钮,因此不适用于您的自定义按钮。请注意,像innerHTML或textContent这样的正确属性也不起作用,因为您的自定义按钮包含一个影子 DOM 根,这似乎使正常的 DOM 内容黯然失色。由于您实际上并没有将影子 DOM 用于任何事情,因此我不清楚您是否真的想将文本放在影子 DOM 中,还是将影子 DOM 放在按钮内的嵌套元素中。 -
感谢@apsillers,我更新了代码以显示如何更改正常的按钮值/文本,我想对我的自定义按钮做同样的事情,我需要将文本放在阴影 DOM 中。
标签: javascript custom-component