2014-06-30 42 views
0

的名字讓我們假設一個變量,當頁面渲染我有一個變量,它看起來像:集變量已經存在基於可變

var test1 = 'this is a string of html'

我有一個看起來像一個函數:

function addRow(v) { 
    $.each(v, function (k,v) { 
     if (k == 'jsvar') { 
     cableHTML = 'test1' 
     insertCabling(parentId, cableHTML) 
     } 
    }); 
    } 

cableHTML設置的變量取決於jsvar的值。所以它會根據選擇的內容而改變。可以是test2,或其他的。 test1/test2/test3等等,當它加載時,它們都作爲頁面上的變量存在。值對jsvar指示需要變量cableHTML

我想將cableHTML設置爲test變量,這些變量是加載的earler。有沒有(希望)一個簡單的方法來實現這一目標?

+1

只要它在範圍內...只要刪除test1附近的引號即可。另外,你是否意識到你正在將'cableHTML'變成一個全局變量? – smerny

+0

對不起,我沒有包含重要的信息 - test1可能是test2或其他東西。 Test1/test2/test3等等,當它加載時,它們都作爲頁面上的變量存在。 'jsvar'值對指示cableHTML需要的變量 –

+2

聽起來像你應該使用數組而不是多個索引變量名。然後做一些像'cableHTML = testArray [v];' – smerny

回答

2

根據你所說的「價值對jsvar的決定是什麼變量cableHTML需要」,假設值是test1test2,等等。你可以這樣做:

function addRow(v) { 
    $.each(v, function (k,v) { 
     if (k == 'jsvar') { 
     cableHTML = eval("v"); 
     insertCabling(parentId, cableHTML) 
     } 
    }); 
    } 

但是,如果使用數組(eval()和索引變量名稱是您應該始終嘗試避免的),您會更好,並且執行以下操作:

function addRow(v) { 
    $.each(v, function (k,v) { 
     if (k == 'jsvar') { 
     cableHTML = myArray[v]; 
     insertCabling(parentId, cableHTML) 
     } 
    }); 
    } 

其中jsvar的值是您想要在myArray陣列中使用的項目的關鍵。

此外,如果您未在此範圍內的其他地方聲明var cableHTML,則您將其設置爲全局變量。當你將它作爲一個參數insertCabling()我以爲你不想/需要一個全球性的,你應該在你的代碼更看後只是增加varcableHTML = ...


而且,似乎each()是不必要的:

function addRow(row) { 
    if(row["jsvar"]){ 
     insertCabling(parentId, row["jsvar"]); 
    } 
    } 
+0

+1使用數組 – Scimonster

+0

謝謝。這正是我需要的。我試着做一個數組..但是,我正在處理的代碼太舊了,很難看,它很難做得更好。 –

+1

@RickyMason,我不確定你是否看到我已經添加到我的答案(關於刪除'each()'循環)。如果你正在使用'eval()'(你不應該這樣做),你可以用下面的代碼來代替整個'each()'塊:try {(row [「jsvar」] && insertCabling(parentId, eval(row [「jsvar」])));} catch(e){}'。還要注意我把'addRow()'參數的名字改爲'row'。 – smerny

0

你需要在你的代碼擺脫引號周圍test1jsvar,除非你想k到等於字符串'jsvar',你想cableHTML等於'test'

var test1 = 'this is a string of html'; 

function addRow(v) { 
    $.each(v, function(k,v) { 
    if (k == jsvar) { 
     cableHTML = test1 
     insertCabling(parentId, cableHTML) 
    } 
    }); 
}