首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法使用onclick动态获取表单元格值

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

Stack Overflow用户
提问于 2017-07-27 18:31:35
回答 3查看 68关注 0票数 0

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

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

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

代码语言:javascript
运行
复制
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>";               
};

下面是我的动态表数据

EN

回答 3

Stack Overflow用户

发布于 2017-07-27 19:05:17

检查一下这个工作代码。

代码语言:javascript
运行
复制
var tr='';
var Location=[{Date:'25 jun 2017',Hour:'1-2',Amount:100},{Date:'25 jun 2017',Hour:'2-3',Amount:200},{Date:'25 jun 2017',Hour:'3-4',Amount:300}];
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"  value="test" class="nav_button btnAction" onclick="test(\'' + Location[i].Hour + '\',\'' + Location[i].Date +  '\',\'' + Location[i].Amount + '\')"></td>';
  tr = tr + "</tr>";               
};
document.getElementById('container').innerHTML=tr;

function test(hour, date, amount){
	console.log( hour, date, amount);
}
代码语言:javascript
运行
复制
<table id="container"></table>

票数 1
EN

Stack Overflow用户

发布于 2017-07-27 18:36:05

你的问题就在这里

代码语言:javascript
运行
复制
tr = tr + "<td><input  type='button'  class='nav_button btnAction' onclick=\"test('" + Location[i].Hour + "','" + Location[i].Date + "','" + Location[i].Amount + "')\"></td>";
票数 0
EN

Stack Overflow用户

发布于 2017-07-27 18:48:01

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

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

另外,不要使用内联的HTML属性(即onclick )。( onmouseover等) here's why。相反,使用现代标准。

您可以看到下面的代码有多简单,并且不需要对引号或连接进行任何混乱。

代码语言:javascript
运行
复制
// Just sample data
var Location = [
  { Hour:"9",  Date: new Date().toLocaleDateString(), Amount: 100.00 },
  { Hour:"12",  Date: new Date().toLocaleDateString(), Amount: 200.00 },
  { Hour:"3",  Date: new Date().toLocaleDateString(), Amount: 300.00 }  
];

// Get reference to table
var t = document.getElementById("tbl");

// Use .forEach to iterate an array instead of couting loop.
// It's simpler because there is no counter that you have to 
// manage and accessing the array element being iterated is easy
Location.forEach(function(element){
  
    // Create a new row element as an object in memory
    var tr = document.createElement("tr");
    
    // Now, create the cells that go in the row and configure them
    var td1 = document.createElement("td");
    td1.textContent = element.Date;
    
    var td2 = document.createElement("td");
    td2.textContent = element.Hour;   
    
    var td3 = document.createElement("td");
    td3.textContent = element.Amount;   
    
    var td4 = document.createElement("td");
    var btn = document.createElement("input");
    btn.type = "button";
    btn.classList.add("nav_button", "btnAction");
    btn.value = "Click Me!";
    
    // This is the modern approach to setting up event handlers
    // It's done completely in the JavaScript
    btn.addEventListener("click", function(){
      test(element.Hour, element.Date, element.Amount);
    });
    
    // Add the button to the cell
    td4.appendChild(btn);
    
    // Add the cells to the row
    tr.appendChild(td1);
    tr.appendChild(td2);
    tr.appendChild(td3);    
    tr.appendChild(td4);    
  
    // Add the row to the table
    t.appendChild(tr);
});
  

function test(date, hour, amount){
 console.log(date, hour, amount);
}
代码语言:javascript
运行
复制
tr:nth-child(odd) {
  background-color:#0af;
}

table, td {
  border-collapse:collapse;
  border:1px solid gray;
  padding:3px; 
}
代码语言:javascript
运行
复制
<table id="tbl"></table>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45358533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档