这个js代码中的错误是什么

时间:2012-07-13 12:40:51

标签: javascript jquery dom

  var RowNumber = row.rowIndex;
  alert(RowNumber);
  var a = document.createElement('a');
  a.textContent = 'Remove';
  a.style.cursor = 'pointer';
  //a.href = "javascript: document.getElementById(tblId).deleteRow(0);"; 
  a.setAttribute("onclick","alert(RowNumber)");
  cell1.appendChild(a);

firebug说'RowNumber未定义'但我已经在上面定义了RowNumber。 同时改变RowNumber变量。

我的完整功能是=

function addRowToTable(tblId,icOptionArray,leavRowFromBottom,selectedValue,selectedQuantity)
{

  var tbl = document.getElementById(tblId);
  var lastRow = tbl.rows.length - (leavRowFromBottom + 0);
  // if there's no header row in the table, then iteration = lastRow + 1
  var iteration = lastRow;
//  var iteration = lastRow + 1;
  var row = tbl.insertRow(lastRow);

  //  cell 0
  var cell0 = row.insertCell(0);
  cell0.align='right';

  var el = document.createElement('label');
  el.textContent = 'IC Chips :';
  cell0.appendChild(el);

  //cell 1
  var cell1 = row.insertCell(1);


  var selector = document.createElement('select');
  selector.id = 'icchips';
  selector.name = 'icchips[]';
  selector.style.width = '200px';
  //alert(selector);

  for (var key in icOptionArray) 
  {   
      if(key == 'containsValue') continue;
      var option = document.createElement('option');
      if(key == selectedValue)
         option.selected = true;
      option.value = key;
      option.appendChild(document.createTextNode(icOptionArray[key]));
      selector.appendChild(option);
  }

  cell1.appendChild(selector);

  var space = document.createTextNode(' ');
     cell1.appendChild(space);  

  var lbl = document.createElement('label');
  lbl.textContent = 'Qty :';
  cell1.appendChild(lbl);  


  var selector = document.createElement('select');
  selector.id = 'additional_quantity';
  selector.name = 'additional_quantity[]';

  for (var key in QUANTITIES_ARR) 
  {   
      if(key == 'containsValue') continue;
      var option = document.createElement('option');
      if(key == selectedQuantity)
         option.selected = true;
      option.value = key;
      option.appendChild(document.createTextNode(QUANTITIES_ARR[key]));
      selector.appendChild(option);
  }

  cell1.appendChild(selector);  
  var space = document.createTextNode(' ');
  cell1.appendChild(space);

  var RowNumber = row.rowIndex;
  alert(RowNumber);
  var a = document.createElement('a');
  a.textContent = 'Remove';
  a.style.cursor = 'pointer';
  //a.href = "javascript: document.getElementById(tblId).deleteRow(0);"; 
  a.setAttribute("onclick","alert(RowNumber)");
  cell1.appendChild(a);

}

3 个答案:

答案 0 :(得分:1)

喜欢这个

a.onclick = function(){ alert(RowNumber); };

答案 1 :(得分:1)

问题是定义RowNumber的本地范围与调用onclick处理程序的范围不同。 @jancha提出的解决方案解决了这个问题。他使用闭包确保处理程序中的RowNumber与本地作用域中的RowNumber相同。

答案 2 :(得分:0)

RowNumber未在创建元素的范围内定义,因为您可以使用jQuery:

var RowNumber = row.rowIndex;
alert(RowNumber);
var a = document.createElement('a');
a.textContent = 'Remove';
a.style.cursor = 'pointer';
//a.href = "javascript: document.getElementById(tblId).deleteRow(0);"; 
$(a).click(function(e){
  alert(RowNumber);
});