Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用onclick动态获取表格单元格值_Javascript_Html - Fatal编程技术网

Javascript 无法使用onclick动态获取表格单元格值

Javascript 无法使用onclick动态获取表格单元格值,javascript,html,Javascript,Html,我面临一个奇怪的问题。我正在生成一个动态表,并在每个表行的末尾使用onclick来获得特定的表单元格值。这里的问题是,每次执行onclick时,我都无法执行onclick 在得到那个错误后,当我检查元素时,我发现这是onclick上的问题 它在test()的左侧创建了双引号,另一个问题是我有一个名为hour的列,其中显示了7-8的间隔,就像它在结果中显示的-1一样 for (var i = 0; i < Location.length; i++) { tr = tr + "<tr

我面临一个奇怪的问题。我正在生成一个动态表,并在每个表行的末尾使用onclick来获得特定的表单元格值。这里的问题是,每次执行onclick时,我都无法执行onclick

在得到那个错误后,当我检查元素时,我发现这是onclick上的问题

它在test()的左侧创建了双引号,另一个问题是我有一个名为hour的列,其中显示了7-8的间隔,就像它在结果中显示的-1一样

for (var i = 0; i < Location.length; i++) {
  tr = tr + "<tr>";
  tr = tr + "<td >" + Location[i].Date + "</td>";
  tr = tr + "<td >" + Location[i].Hour + "</td>";
  tr = tr + "<td >" + Location[i].Amount + "</td>";                
  tr = tr + "<td><input  type='button'  class='nav_button btnAction' onclick='test('" + Location[i].Hour + "','" + Location[i].Date + "','" + Location[i].Amount + "'></td>";
  tr = tr + "</tr>";               
};
for(变量i=0;itr=tr+“你的问题就在这里

tr = tr + "<td><input  type='button'  class='nav_button btnAction' onclick=\"test('" + Location[i].Hour + "','" + Location[i].Date + "','" + Location[i].Amount + "')\"></td>";
tr=tr+”;

您有很多事情需要注意,但最大的问题是字符串的串联以及这些字符串中引号的嵌套

在创建新的HTML元素时,请使用现代标准。不要连接字符串,而是创建元素作为内存中的对象,然后配置它们的属性。这将消除串联的需要,并使生活更加简单。例如,如果您决定要交换单元格内容的顺序,只需交换两行代码的位置-无需担心修改字符串

另外,不要使用内联HTML事件属性(例如,
onclick
onmouseover
等)。而是使用现代标准

您可以看到下面的代码是多么简单,并且不需要任何引号或串联的混乱

//只需示例数据
变量位置=[
{小时:“9”,日期:新日期().toLocaleDateString(),金额:100.00},
{小时:“12”,日期:新日期().toLocaleDateString(),金额:200.00},
{小时:“3”,日期:新日期().toLocaleDateString(),金额:300.00}
];
//获取对表的引用
var t=document.getElementById(“tbl”);
//使用.forEach迭代数组,而不是couting循环。
//它更简单,因为你不需要计数器
//管理和访问正在迭代的数组元素很容易
Location.forEach(函数(元素){
//创建一个新行元素作为内存中的对象
var tr=document.createElement(“tr”);
//现在,创建行中的单元格并对其进行配置
var td1=document.createElement(“td”);
td1.textContent=element.Date;
var td2=document.createElement(“td”);
td2.textContent=元素.Hour;
var td3=document.createElement(“td”);
td3.textContent=元素.金额;
var td4=document.createElement(“td”);
var btn=document.createElement(“输入”);
btn.type=“按钮”;
添加(“导航按钮”、“按钮”);
btn.value=“单击我!”;
//这是设置事件处理程序的现代方法
//这完全是在JavaScript中完成的
btn.addEventListener(“单击”,函数(){
测试(要素时间、要素日期、要素金额);
});
//将按钮添加到单元格中
td4.儿童(btn);
//将单元格添加到行中
tr.appendChild(td1);
tr.appendChild(td2);
tr.appendChild(td3);
tr.appendChild(td4);
//将行添加到表中
t、 附肢儿童(tr);
});
功能测试(日期、小时、金额){
控制台日志(日期、小时、金额);
}
tr:n个子项(奇数){
背景色:#0af;
}
表,td{
边界塌陷:塌陷;
边框:1px纯色灰色;
填充:3倍;
}

检查此工作代码

var tr='';
变量位置=[{日期:'2017年6月25日',时间:'1-2',金额:100},{日期:'2017年6月25日',时间:'2-3',金额:200},{日期:'2017年6月25日',时间:'3-4',金额:300}];
对于(变量i=0;i

好的,让我们备份一下。您需要提供所有相关的代码,以便我们能够重现您的错误。这意味着HTML、CSS和JavaScript。您甚至还没有提供
test()
函数。
onclick='test(“
您正在立即打开和关闭单引号,请转义引号只需更改这行代码tr=tr+”;