2012-07-16 95 views
0

我在更改PHP和JavaScript的頁面上的變量時遇到問題。創建JavaScript函數以更改之前聲明的變量

這部分是對我工作的罰款:

<script language="javascript" type="text/javascript"> 
function changebg(my) 
{ 
    document.getElementById("imglayer").style.backgroundImage ='url('+ my.src +')'; 
    document.getElementById("cropframe").style.backgroundImage ='url('+ my.src +')'; 
} 
var test2 = new String("url('+ my.src +')"); 
</script> 

<img src="../../uploads/595MCoDFyArFFe.jpg" width="50" height="50" onclick="changebg(this)" > 
<img src="../../uploads/P6l6J8aqzli6gh.jpg" width="50" height="50" onclick="changebg(this)" > 
<img src="../../uploads/stXWS8fL4L3nvs.jpg" width="50" height="50" onclick="changebg(this)" > 

與DIV的ID被稱爲供以後使用。

我的問題是我有另一個變量,我需要動態改變:

<script type="text/javascript"> 
    var test1 = new String("<?php $src_name = '"); 
    var test2 = new String("956ENbXjzTlkBo.jpg"); 
    var test3 = new String("'; // modify this, original file?>");"); 
    document.write(String(test1, test2, test3); 
</script> 

我需要var test2與正在由DIV ID抓住另外兩個變化。 如何更改該字符串值?這甚至有可能嗎?

任何幫助將不勝感激!

+4

不能'var test1 = new String(「<?php $ src_name ='」);'簡單地'var test1 =「<?php $ src_name ='」;'? – asawyer 2012-07-16 22:30:33

+2

就像旁邊一樣,不要聲明對象使用字符串,只要'var testetc =「string goes here」;'。 – Daedalus 2012-07-16 22:30:34

+0

你不能隨心所欲地混合使用PHP和JS代碼。我不明白你想達到什麼目的? – haynar 2012-07-16 22:30:54

回答

4

首先,這不是Java(甚至在Java中你並不需要它)。你不應該使用new String(…);簡單地使用字符串文字:

var test1 = "…"; 

其次,字符串是不可變的;你不能改變一個字符串值/對象;你只能創建和分配一個新的字符串。但是,也可以創建具有一個返回根據其它值的值(如可變值)的方法的用戶定義Object實例:

var test2 = { 
    toString: function() { 
    return "foo" + test1 + "bar"; 
    } 
}; 

document.write() DOM method隱式將其參數轉換爲字符串,其通過完成調用船體對象的toString()valueOf()方法,以先到爲準(請參閱ECMAScript Language Specification, 5.1 Edition, section 9.8)。所以

document.write(test2); 

相當於

document.write(String(test2)); 

section 15.5.1)或

document.write(test2.toString()); 

它將寫該對象的toString()方法的返回值通過的test2值提及。 (對於輸出的動態變化,你需要使用其他的DOM功能,如符合標準的textContentnodeValue,或專有innerHTML屬性。)

順便說一句,在String構造函數只考慮一個參數(見上文) ,所以new String(x, y, z)相當於new String(x)。也許你正在尋找連接:new String(x + y + z)。但是如果至少有一個操作數是String類型的,那麼x + y + z就足夠了;如果沒有,String(x) + y + z"" + x + y + z的作品。

0

只要使用正確的引號:

var test2 = new String("url(" + my.src + ")"); 

或者乾脆:

var test2 = "url(" + my.src + ")"; 

但是,你不能從Javascript編寫PHP代碼改變一個PHP變量。當Javascript運行時,php腳本已經結束。

0

首先,你要做一個關於構建字符串的非常奇怪的方法。我認爲這點是,在這一切結束後,結束了一個字符串,看起來像這樣:

<?php $src_name = 'X'; // modify this, original file ?> 

(此輸出PHP,不會被Web服務器進行解釋,但我會假設你知道和你輸出其他別的原因。)

哪裏x是某些數據塊,在一些其他的DOM元素是可用的(你img元素之一,或許,因爲文件名是類似)。如果您希望在發生某些未來任意事件後更新已打印到頁面的此x值。您需要給自己更新一些有形的元素 - 例如span元素。

嘗試document.write()荷蘭國際集團

document.write("&lt;?php $src_name = '<span id=\"my-element\">X</span>'; // modify this, original file ?&gt;"); 

注意我已經改變了你的<和>及其編碼的等價物。

然後,您可以稍後使用JavaScript更新您的span的內容(請參見下文)。這不會改變您已聲明的變量,而是它正在更改頁面的內容。既然你只是打印所有字符串(或者試圖,因爲String()不會連接給定的字符串,就像你認爲的那樣)),在我看來,這就是你所要做的試圖完成。

document.getElementById("my-element").innerText = "NEW VALUE"; 

再次,這是不更新變量本身,只是更新您打印到網頁中的文字。無論如何,這似乎是你的最終目標,如果我錯了,請糾正我。