我正在创建一个扩展表单元格对象的自定义对象。 新的单元格对象包含一个输入文本框。
这是我的代码:
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
//table
class DataTable extends HTMLTableElement {
constructor() {
super()
console.info('data-table created')
}
}
customElements.define('data-table',
DataTable,
{
extends: 'table'
});
//cell
class DataCell extends HTMLTableCellElement {
connectedCallback() {
console.info('cell connected')
if (typeof this.renderContent === 'function')
this.renderContent()
}
renderContent() {
console.info('data-string render')
this.textBox= document.createElement("input");
this.textBox.type="text";
this.appendChild(this.textBox);
}
set value(v)
{
this.textBox.value=v;
}
get value()
{
return this.textBox.value;
}
}
customElements.define('data-string',
DataCell,
{
extends: 'td'
});
$( document ).ready(function(){
var t=new DataTable();
var row=t.insertRow(t.rows);
var cell=new DataCell();
row.appendChild(cell);
cell.value="gfg";
$(document.body).append(t);
});
</script>
</head>
<body>
<h4>Test Table Extension v1</h4>
</body>
</html>
我想在新单元格中添加一个“值”属性。 将值设置为文本框时,出现“无法设置未定义的属性'值'”。在“设置值(v)”功能中,“此”是指文档,而不是单元格,这就是问题所在。
答案 0 :(得分:0)
您必须先创建textBox输入,然后才能使用.value
访问它。当前,在您调用.value
时尚未创建/分配。一个解决方案是在Cell的构造函数中创建input-element:
//table
class DataTable extends HTMLTableElement {
constructor() {
super();
console.info('data-table created');
}
}
customElements.define('data-table',
DataTable, {
extends: 'table'
});
//cell
class DataCell extends HTMLTableCellElement {
constructor() {
super();
this.textBox = document.createElement("input");
this.textBox.type = "text";
console.info('data-cell created');
}
connectedCallback() {
console.info('cell connected')
if (typeof this.renderContent === 'function')
this.renderContent()
}
renderContent() {
console.info('data-string render')
this.appendChild(this.textBox);
}
set value(v) {
this.textBox.value = v;
}
get value() {
return this.textBox.value;
}
}
customElements.define('data-string',
DataCell, {
extends: 'td'
});
$(document).ready(function() {
var t = new DataTable();
var row = t.insertRow(t.rows);
var cell = new DataCell();
row.appendChild(cell);
cell.value = "gfg";
$(document.body).append(t);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h4>Test Table Extension v1</h4>