gpt4 book ai didi

javascript - 通过html传递对象变量

转载 作者:可可西里 更新时间:2023-11-01 13:20:14 27 4
gpt4 key购买 nike

我试图通过 HTML 传递一个对象,但得到的是

Uncaught SyntaxError: Unexpected end of input

错误。我仍在学习 JavaScript DOM,非常感谢任何帮助。

data = getdata(); //retreive my data
var mtable = document.createElement("table"); //create table element via javascript
mtable.innerHTML += "<tr><th>Name</th><th>Modify</th></tr>";
for (i = 0; i < data.length; i++) {
var ins = createEle("tr");
ins.innerHTML = "<td>" + data[i]['name'] + "</td>";
ins.innerHTML += "<td><button id=" + data[i]['tid'] + " onclick=make_modifytourney2(this.id," + data[i] + ")>Modify</button></td></tr>";
mtable.appendChild(ins);
}

然后我将 mtable 附加到文档中。 data[i] 是我想通过此代码传递的数组对象,但它不起作用。我知道我可以使用 tid 再次检索此数据,但我不想这样做,因为数据已经存在。

编辑:我的createEle

function createEle(ele, css) {
var nn = document.createElement(ele);
nn.setAttribute("class", css);
return nn;
}

一个简单的助手编辑 2我的数组数据将是这样的

  data=[(4) [{…}, {…}, {…}, {…}]
0
:
{name: "T1", tid: 1, fdate: "2018-07-11", tdate: "2018-07-26", category: "mens", …}
1
:
{name: "T2", tid: 2, fdate: "2018-07-20", tdate: "2018-07-26", category: "womens", …}
2
:
{name: "nart", tid: 3, fdate: "0001-01-01", tdate: "0001-01-01", category: "1", …}
3
:
{name: "xyz", tid: 4, fdate: "0001-01-01", tdate: "0222-02-01", category: "23", …}]

最佳答案

单击您生成的“修改”按钮时发生错误。

主要是因为您在 onclick 属性中声明了这条指令:

make_modifytourney2(this.id," + data[i] + ")

生成以下 HTML 代码:

<button id="undefined" onclick="make_modifytourney2(this.id,[object" object])>Modify</button>

现在您的 onclick 属性中有一些经过剪辑的 JavaScript 代码。

我不知道这是不是打字错误,但无论如何,如果你想摆脱那个错误,你需要:

  • 使用转义双引号封装onclick属性指令
  • 使用带空格的单引号来封装函数调用的参数

您的代码将是:

ins.innerHTML += "<td><button id=" + data[i]['tid'] + " onclick=\"make_modifytourney2(this.id,'" + data[i] + "')\">Modify</button></td></tr>";

function getdata() { 
return [{name : "John"}, {name : "Jack"}];
}

function createEle(ele, css) {
var nn = document.createElement(ele);
nn.setAttribute("class", css);
return nn;
}

function make_modifytourney2(param1, param2) {
console.log(`Clicked Modify with params : ${param1}, ${param2}`);
}

var data = getdata(); //retreive my data
var mtable = document.createElement("table"); //create table element via javascript
mtable.innerHTML += "<tr><th>Name</th><th>Modify</th></tr>";
for (i = 0; i < data.length; i++) {
var ins = createEle("tr");
ins.innerHTML = "<td>" + data[i]['name'] + "</td>"
ins.innerHTML += "<td><button id=" + data[i]['tid'] + " onclick=\"make_modifytourney2(this.id,'" + data[i] + "')\">Modify</button></td></tr>";
mtable.appendChild(ins);
}
document.body.appendChild(mtable);

现在,由于您生成元素的方式,这有点困惑。它宁愿建议您将 DOM 元素用作 JavaScript 对象并使用事件监听器。

这是它的样子:

function getdata() {
// dummy object with a tid and a name field
return [{
tid: '1',
name: "John"
}, {
tid: '2',
name: "Jack"
}];
}

function createEle(ele, css) {
var nn = document.createElement(ele);
nn.setAttribute("class", css);
return nn;
}

// function that creates a TD element with a child
function createTd(child) {
var td = document.createElement("td");
td.appendChild(child);
return td;
}

// function that creates a modify button based on your data object
function createModifyButton(data) {
var button = document.createElement("button");
button.id = data.tid;
button.addEventListener("click", function() {
// use whatever parameter you need from the data object :
make_modifytourney2(data.tid, data.name);
});
button.appendChild(document.createTextNode("Modify"));
return button;
}

function make_modifytourney2(param1, param2) {
console.log(`Clicked Modify with params : ${param1}, ${param2}`);
}

// local variables
var data, mtable, i, ins, row1, row2;

data = getdata(); //retreive my data
mtable = document.createElement("table"); //create table element via javascript
mtable.innerHTML += "<tr><th>Name</th><th>Modify</th></tr>";
for (i = 0; i < data.length; i++) {
ins = createEle("tr");
// creating tds and appending them :
row1 = createTd(document.createTextNode(data[i]['name']));
ins.appendChild(row1);
row2 = createTd(createModifyButton(data[i]));
ins.appendChild(row2);

mtable.appendChild(ins);
}
document.body.appendChild(mtable);

关于javascript - 通过html传递对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51615761/

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