如何从JavaScript函数中获取值?

时间:2011-06-07 14:56:58

标签: javascript jquery

我需要从JavaScript函数中获取行号:

function cap_check(){
    var row;

    $('td').change(function(){ 
        row = $(this).parent().parent().children().index($(this).parent());  
        alert(row);
    }); 

    alert(row);
}

函数内,row被正确警告。在函数之外,它是undefined

4 个答案:

答案 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事件结果相同的值。

小提琴:

http://jsfiddle.net/RagUe/5/

(请注意,我将事件更改为“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
}