我需要从JavaScript函数中获取行号:
function cap_check(){
var row;
$('td').change(function(){
row = $(this).parent().parent().children().index($(this).parent());
alert(row);
});
alert(row);
}
在函数内,row
被正确警告。在函数之外,它是undefined
。
答案 0 :(得分:2)
除了cap_check
之外,调用undefined
无法提醒任何其他内容。函数不是静态对象。调用函数时,它会在内部堆栈上创建一个新实例。 row
将初始化为undefined
,新的点击处理程序将绑定到td
个元素(也可能不太有用),因为每次调用时都会绑定另一个重复事件处理程序{ {1}})。
最有可能的是,你想要这样的东西:
cap_check
这是一个自动执行的功能。当脚本运行时,“返回”之前的函数部分立即执行,创建一次事件绑定,并返回一个引用原始函数实例的函数。这将创建一个闭包,这意味着该函数维护对其父对象的引用(在本例中为var cap_check=(function() {
var row;
$('td').change(function(){
row = $(this).parent().parent().children().index($(this).parent());
alert(row);
});
return function() {
alert(row);
};
}());
变量)。因此,您的事件处理程序以及作为row
返回的函数现在将始终引用cap_check
的相同实例。
所以 - 现在任何调用row
的代码都会返回与cap_check
事件结果相同的值。
小提琴:
(请注意,我将事件更改为“click”而不是“更改”以使其易于测试。)
答案 1 :(得分:0)
$('td').change(function(){ })
更改允许您传递将在值更改时运行的回调。
所以只需附加回调就不会运行它。它只会在值发生变化时运行。由于函数的其余部分在值更改之前运行,因此row
的值未定义。
只需将脚本的其余部分放在回调中
即可答案 2 :(得分:0)
你不应该在变更函数中保留函数的其余部分吗?
function cap_check(){
var row;
//-----------------------Jquery current table row
$('td').change(function(){
row = $(this).parent().parent().children().index($(this).parent());
//rest of script here
});
}
答案 3 :(得分:-1)
函数内的row
与外面的行完全不同。
因此,如果您在change()
函数之外row
未定义,但只要change
被触发,row
就会获得一个值
function cap_check(){
var row;
$('td').change(function(){
row = $(this).parent().parent().children().index($(this).parent());
alert(row); //only has a value on change
});
alert(row); //undefined
}