使用jQuery .change()将变量传递给onChange事件

时间:2011-02-24 15:04:15

标签: jquery

我正在编写一个简单的Web应用程序并遇到了各种绊脚石 - 我已经找到了一种解决方法,但是我想了解一下我在浏览jQuery文档时做错了什么。

我有一个函数,当从页面调用时,插入一个表行:

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变量的值,就像引入行时的值一样,而不是在添加其他行之后保存变量的最新值。

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

1 个答案:

答案 0 :(得分: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)}))        
        )
);
相关问题