gpt4 book ai didi

javascript - 如何在自定义元素中包装输入字段?

转载 作者:行者123 更新时间:2023-11-30 14:10:34 25 4
gpt4 key购买 nike

我正在尝试将输入字段包装在自定义元素中。

自定义元素 DOM 如下所示:

<custom-element>
<div class="fancy-wrapper">
<input value="4">
</div>
<custom-element>

虽然元素应该像这样工作:

<custom-input id="test"></custom-input>

<script>
let test = document.getElementById('test')
console.log(test.value); // should return 4 (value of inner input)

test.onkeydown = function(e){
console.log(e.target.value); // should the new value of the inner input
};
</script>

有没有办法得到<custom-input>重定向到 <input> 的属性里面的属性,而不用手工连接所有东西?

最佳答案

不,这与拥有一个 DIV 和另一个子 DIV 没有什么不同

您必须自己在 CustomElement 和内容之间建立联系。

一种方法是在您的自定义元素上定义一个获取/设置函数来获取子输入的值

无需手动声明 Get/Set 您当然可以循环任何子元素并在 CustomElement 上分配 definePropertyProxies

下面的示例创建了 2 个 INPUT 字段和一个 this.input数组:

    <number-and-range>
<input type="number"> // this.input[0]
<input type="range"> // this.input[1]
</number-and-range>

并连接 (GET/SET) <number-and.range>.valuethis.input[0]

customElements.define('number-and-range', class extends HTMLElement {
get value() {
return this.input[0].value;
}

set value(val) {
//input validation should go here
this.input[0].value = val;
console.clear();
console.log('new value:',val);
}
connectedCallback() {
this.input = ['number', 'range'] //create [0] and [1] values in array
.map((type, idx) => Object.assign(
this.appendChild(document.createElement('input')), {
type,
min: 20,
max: 50,
oninput: _ => this.value = this.input[~~!idx].value = this.input[idx].value //toggle [0] and [1]
}));
this.value = 42;//default value
}
});

let el=document.querySelector('number-and-range');
console.log(el.value);
el.value=99;
<body>
<h3>Custom Element : Connected INPUT and Range slider</h3>
Please enter a number between 20 and 50, or use the range slider
<p>
<number-and-range></number-and-range>
</p>
</body>

关于javascript - 如何在自定义元素中包装输入字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54532011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com