2012-06-06 68 views
1

我想用keyup()方法在输入字段上获取一个信用卡号,但是当我在控制台中键入变量名时,我得到了未定义的值。然而,当我输入字段时,数字被记录到控制台。使用keyup设置变量()

$('#authorizenet_cc_number').keyup(function(){ 
     var ccNum = $('#authorizenet_cc_number').val(); 
     console.log(ccNum);  
    }); 

我错了,我的理解是,当输入值改变它存储在ccNum变量?

+0

这个元素是否存在于页面加载时?也;而不是再次声明该变量,只需使用'$(this).val();' – Ohgodwhy

+2

因为该变量仅限于'keyup'函数处理函数的作用域。 – vcsjones

回答

3

ccNum的作用域是keyup处理程序匿名函数的本地作用域。如果你想从更高的范围访问它,请将它放在更高的范围内。

var ccNum; // declaration in an outer scope 

$('#authorizenet_cc_number').keyup(function(){ 
    // no need to reselect on the input, just use "this" 
    ccNum = $(this).val(); // initialization in an inner scope 
    console.log(ccNum); // logs the value 
}); 

console.log(ccNum); // also logs the value (if called after the handler has fired) 
+0

按照您的示例,当我在控制台中输入ccNum时,仍然收到“ReferenceError:ccNum未定义”。 –

+0

http://jsfiddle.net/ayTW2/ – jbabey

+0

首先,感谢您的耐心和帮助。所以我得到了console.log,没有问题。但是,如果我在铬命中转义中打开检查器并输入“ccNum;”这是我的理解,它会给我变量的价值。这不是吗? –

3

ccNum对函数是局部的,所以它将是未定义的,除非在函数中插入一个断点。

您还可以添加调试器,这会导致中断发生。然后,您可以使用控制台查看ccNum的值。

$('#authorizenet_cc_number').keyup(function(){ 
     var ccNum = $('#authorizenet_cc_number').val(); 
     console.log(ccNum); 
     debugger;  
    }); 
+0

如果我把ccNum放在keyup函数之外,我仍然没有定义。我将如何使这个全局变量? –

+0

请按照jbabeys的步骤,如果你声明它全球一定要改变“var ccNum = ..”为“ccNum =”作为关键字var将创建一个新的局部变量。 – Porco