2013-02-16 57 views
0

我搞亂了需要具有可變動態部分的Javascript代碼。創建一個聲明變量及其值的字符串(文本),用於Javascript

我試圖替代這一塊的Javascript代碼:

var data = document.getElementById('IDofSomeHiddenField').value; 
var print = document.getElementById('IDofOutputField'); 
print.value = data; 

的東西,如:

var encapsulatedData = "var data = document.getElementById('IDofSomeHiddenField').value;"; 
var encapsulatedPrint = "var print = document.getElementById('IDofOutputField');"; 

這樣,當我在Javascript代碼中使用的地方:

encapsulatedData; 
encapsulatedPrint; 

這將工作:

print.value = data; 

但它不起作用。

有沒有辦法如何聲明:在類似的方式

var encapsulatedData 
var encapsulatedPrint 

像我上面寫的,因此:

print.value = data; 

的作品?

+0

到底什麼你在幹什麼?我無法想象任何你想要的東西是一個好主意的場景!你可以退後一步,更詳細地描述你的目標嗎? – 2013-02-16 23:13:58

+0

謝謝弗朗西斯。我想做的事情可以在服務器端在C#中完成:'string encapsulatedData =「var data =(document.getElementById('IDofSomeHiddenField')。value;」;'然後你可以添加到JavaScript塊(服務器方):'string addtoblock = @「function somename(){...」+ encapsulatedData + @「......};'我在服務器端實現了它,然後將它注入.aspx頁面。但是因爲JavaScript隨着每次回發而改變,所以ScriptManager.RegisterClientScriptBlock只是第一次工作,所以我正在嘗試尋找一種解決方法,我在下面給你的評論寫了更多的內容: – hugo 2013-02-17 00:47:19

+0

用以下方法創建一個新問題(或者更新當前問題)你的*實際*問題,這實際上是一個ASP問題,而不是一個JS問題。 – 2013-02-17 00:50:47

回答

0

我覺得你有一個語法錯誤。你不關閉第一和第二行的括號。

var data = document.getElementById('IDofSomeHiddenField').value; 
var print = document.getElementById('IDofOutputField'); 
print.value = data; 

這也是一種糟糕的形式來使用JS評估,就像你試圖做的那樣。如果你真的想爲每個返回頁面元素的頁面元素創建一個函數。 ECMAScript 5具有屬性,我認爲它與你想要做的是一樣的,但這不是ECMAScript 3 JS的工作方式。

+0

謝謝你,你是對的。但即使我解決這個問題,它也不起作用。 – hugo 2013-02-16 23:28:18

0

你的意思是神奇地創建全局變量嗎?

function encapsulatedData() { 
    window.data = document.getElementById('IDofSomeHiddenField').value; 
} 
function encapsulatedPrint() { 
    window.print = document.getElementById('IDofOutputField'); 
} 
encapsulatedData(); 
encapsulatedPrint(); 

print.value = data; 

這不是很衛生的代碼,而你想要的可能不是你應該做的。你能退一步說你的目標是嗎,而不是意思是那個目標?我懷疑你真正想要使用的是關閉還是返回一流的函數來進行延遲評估。

例如:

function makePrinter(id) { 
    var outputfield = document.getElementById(id); 
    return function(value) { 
     outputfield.value = value; 
    } 
} 
function getValue(id) { 
    return document.getElementById('IDofSomeHiddenField').value; 
} 

var data = getValue('IDofOutputField'); 
var print = makePrinter('IDofOutputField'); 

print(data); 
+0

我在.aspx頁面上有一段Javascript代碼。在PostBack上,在後面的C#代碼中,我創建了格式爲「code」的「隨機」字符串「var data = document.getElementById('IDofSomeHiddenField')。value;」放入TextBox的「代碼」。回發後,Javascript從TextBox獲取值並應使用它。我試圖做一些事情,可以在服務器端在C#中完成:('code'string encapsulatedData =「var data =(document.getElementById('IDofSomeHiddenField')。value;」;'code'然後 'code' string addtoblock = @「function somename(){...」+ encapsulatedData + @「......};'code'),但使用Javascript。 – hugo 2013-02-17 00:03:24