2011-02-24 31 views
1

我正在写一个简单的Web应用程序,并且遇到了各种各样的绊脚石 - 我已经找到了解决方法,但我想了解我是什么在浏览jQuery文档时做错了。将变量传递给onChange事件与jQuery .change()

我有一个功能,即从页面调用时,插入一个表格行:

var rowCount = 0; 
function addRow(tbody){ 
    $("#"+tbody).append(
     $('<tr>').attr('id','row_'+rowCount).append(
      $('<td>').append('Content'), 
      $('<td>').append($('<input>').addClass('text').attr('readOnly','readOnly')), 
      $('<td>').append($('<input>').addClass('text').attr('readOnly','readOnly')), 
      $('<td>').attr('id','barcode_cell'+rowCount), 
      $('<td>').append($('<input>').addClass('text').addClass('quantity').attr('maxLength',3)), 
      $('<td>').append($('<select>').change(function(){isMissing(this,rowCount)}))   
      ) 
    ); 
} 

在哪里我主要关心的是最终<select>盒,它的onChange事件。我ISMISSING功能:

function isMissing(elem, counter){ 
    alert(elem.value); 
    alert(counter); 
} 

会发生什么事是如预期,但该行数总是警报的最新行,无论哪个行叫它箱警报的设定值。相反,我希望它保存行引入时rowCount变量的值,而不是添加其他行后的变量的最新值。

我在做什么错?我如何强制变量保持静态?我必须使用全局变量,因为有多个函数可以将行添加到多个表中,这是我可以确保任何表中的每一行都具有唯一标识符的唯一方法。

回答

3

这是因为全球范围内的rowCount。你可以在你的addRow方法里面做这样的事情:

function addRow(tbody){ 
    var internalVariable = rowCount; 
    $("#"+tbody).append(
     $('<tr>').attr('id','row_'+rowCount).append(
      $('<td>').append('Content'), 
      $('<td>').append($('<input>').addClass('text').attr('readOnly','readOnly')), 
      $('<td>').append($('<input>').addClass('text').attr('readOnly','readOnly')), 
      $('<td>').attr('id','barcode_cell'+rowCount), 
      $('<td>').append($('<input>').addClass('text').addClass('quantity').attr('maxLength',3)), 
      $('<td>').append($('<select>').change(function(){isMissing(this,internalVariable)}))   
     ) 
); 
+0

太棒了!我已经尝试在变化事件中的函数构造内部定义一个临时变量,但是我遇到了同样的问题。谢谢! – 2011-02-24 15:14:11