2009-12-10 100 views
1

有下一個腳本:變量範圍JS - 返回初始分配,而不是改變

function clicker(){ 
var linkId = "[id*=" + "link]"; 
var butnId='initial';  
    $j(linkId).click(function(){ 
     var postfix = $j(this).attr('id').substr(4); 
     butnId = '#' + 'butn' + postfix; 
     }); 

return butnId; 

} 

功能輸出「初始」值。

如何返回變量butnId的實際價值,它已被點擊功能內轉化後?

+0

目前尚不清楚,從你的代碼,你居然想在這裏實現。當'clicker'返回時,它不會執行'postfix'部分。它所做的只是說當代碼鏈接被點擊時應該執行代碼*。沒有循環來轉換價值。 「clicker」實現的目標是什麼? – 2009-12-10 11:03:57

+0

我想從點擊鏈接中提取後綴,並在其基礎上,我會知道下一步應該點擊哪個鏈接 - 它的ID是butnId。 似乎我認爲從Java的角度來看,當我初始化變量,transtom它在,例如。循環,並且它的值被改變。 所以我會在下面嘗試你的建議。謝謝。 – sergionni 2009-12-10 11:48:46

+0

我想補充說,我執行單擊UI和butnId是真正改變,但它沒有改變作爲函數輸出,所以它不會超出點擊功能範圍,並保持不變。 – sergionni 2009-12-10 11:50:52

回答

2

傳遞給click的函數中的代碼在單擊該元素之前不會執行。

你可能需要的clicker呼叫者在一個回調函數,然後可以通過點擊函數調用傳遞(假設你不想硬編碼所需的操作爲點擊功能本身): -

function clicker(callback){ 
var linkId = "[id*=" + "link]"; 
var butnId='initial';  
    $j(linkId).click(function(){ 
     var postfix = $j(this).attr('id').substr(4); 
     butnId = '#' + 'butn' + postfix; 
       callback(butnId); 
     }); 

return butnId; 

} 

這可能可以重構爲: -

function clicker(callback){ 
var linkId = "[id*=" + "link]"; 
    $j(linkId).click(function(){ 
     var postfix = $j(this).attr('id').substr(4); 
     callback('#' + 'butn' + postfix); 
     });  
}