将参数/输入数据传递到javascript中的自定义元素

哈桑·优素福(Hasan A Yousef)

我想实现的相同的代码使用JavaScript,所以写了下面的代码为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');

但是失败了,按钮仍然是空的!考虑到单击后其他按钮的值已更改

任何想法?

炸药

影子DOM根只能在定义的功能范围内访问。您要么需要将影子DOM根对象分配给外部作用域变量,要么需要公开操作影子DOM的作用域内函数。由于您要操纵多个元素的影子DOM,因此在每个实例上使用setter函数是最佳选择。

您可以完全公开影子DOM:

SaveBtn.createdCallback = function() {
    var shadow = this.createShadowRoot();
    this.myShadow = shadow;
    //...
}

...

el.myShadow.textContent = "click me";

但是,由于影子DOM的一个主要功能是能够隐藏DOM组件,使其不受其他脚本的操纵,因此,您可能希望拥有一个setter函数,例如,该函数可以验证输入并在内部执行操纵:

SaveBtn.createdCallback = function() {
    var shadow = this.createShadowRoot();

    this.setShadowText = function(text) {
        shadow.textContent = text;
    }
    //...
}

...

el.setShadowText("click me");

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将参数传递到自定义URI

如何将数据从JavaScript代码传递到Polymer自定义元素?

如何从ui-router中的视图将自定义数据传递到状态?

将数据传递到包含的元素

从asyncTask将数据传递到自定义适配器

将参数从XAML传递到自定义视图

将自定义数据传递到vue-router中的$ router.push()

在Woocommerce 3中将购物车项目中的自定义数据传递到Order meta

将自定义产品元数据传递到Woocommerce 3中的订单

如何获取django-all auth将数据传递到自定义用户模型?

将自定义产品元数据传递到Woocommerce 4中的订单

将自定义数据传递到Symfony / Twig中的表单主题

VueJS将值从子元素传递到父元素(进行自定义样式的输入)

将数据传递到ionic 5自定义元素标签

将视图数据传递给Kendo网格中的自定义编辑器

将数据传递到自定义绑定处理程序的最佳方法是什么

自定义IOS7过渡,将数据传递到呈现的View Controller

将参数从控件传递到自定义授权

如何将自定义数据传递到Yii中的EDataTables

将参数传递到自定义的Rails路线中

将参数从自定义URL方案传递到Webview

如何将参数输入传递给R中的自定义函数?

使用HTML表单将输入数据传递到Javascript代码中

Google Polymer-将数据从铁清单传递到自定义元素

将参数传递到自定义网址路由

如何创建一个自定义的 AlertDialog,它能够将输入的数据传递回 Android 中的调用 Activity?

使用 React Bootstrap 将数据传递给自定义元素

Xamarin:将参数从绑定传递到自定义控件

有没有更好的方法将数据传递给 SwiftUI 中的自定义键盘视图?