2015-04-15 22 views
0

我有一個JavaScript代碼來創建一個表中的行:存儲值時,進入它

function create_row() { 
    var table = document.getElementById("main_table"); 
    var n = table.rows.length; 
    var m = table.rows[0].cells.length; 
    var row = table.insertRow(n); 
    for (i=2; i<m; i++) { 
     var cell = row.insertCell(i); 
     cell.innerHTML = "<input size=4>"; 
     cell.addEventListener("change", function() { 
      console.log("Column of a cell: " + cell.cellIndex); 
     }) 
    } 
} 
document.getElementById('create_row').onclick = create_row; 

我的本意是,當用戶鍵入的東西在細胞內,我要打印值。然而,cellIndex始終是我的表(或m)中的列數(據我所知,因爲在所有單元格創建後點擊該單元格,因此i達到m)。

如何更改單元格的內容時接收行,列和單元格的值?

+1

:試試這個http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example – epascarello

+0

我正要張貼此作爲一個答案,但它得到了當我檢查它時被欺騙了。當你生成每個單元格時,你可以給它一個自定義的屬性組合 - 即''td row =「3」column =「4」>'然後在你的'change'監聽器中,讓函數返回這個值,像這樣: 'cell.addEventListener(「change」,function(){ console.log(「Row」+ this.getAttribute('row')+「Column」+ this.getAttribute('column')); //以這些值作爲參數調用函數} 這是一個示例: https://jsfiddle.net/opf16x7y/ – Josiah

回答

1

Oooh,Javascript關閉。也許

function create_row() { 
    var table = document.getElementById("main_table"); 
    var n = table.rows.length; 
    var m = table.rows[0].cells.length; 
    var row = table.insertRow(n); 
    for (i=2; i<m; i++) { 
    create_cell(i); 
    } 
} 

function create_cell(){ 
    var cell = row.insertCell(i); 
    cell.innerHTML = "<input size=4>"; 
    cell.addEventListener("change", function() { 
    console.log("Column of a cell: " + cell.cellIndex); 
    }) 
} 

document.getElementById('create_row').onclick = create_row;