2012-06-06 54 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