我正在编写一个简单的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变量的值,就像引入行时的值一样,而不是在添加其他行之后保存变量的最新值。
我做错了什么?如何强制变量保持静态?我必须使用全局变量,因为有多个函数将行添加到多个表中,这是我可以确保任何表中的每一行都有唯一标识符的唯一方法。
答案 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)}))
)
);