2012-06-23 44 views
0

我基本上試圖用用戶輸入創建一個url友好的查詢字符串。這些變量替換空格和@並將它們全部加在一起,然後函數應該在段落中顯示URL。這讓我感到非常愚蠢,因爲我知道這很簡單,我搞砸了。請指出我的錯誤。作爲一個方面說明,是否有更好的方法來做所有這些替換而沒有所有變量?簡單的JavaScript字符串變量返回「undefined」

以下代碼應返回類似於以下的字符串: https://www.somewebsite.com/formhandler.php? & FNAME =戈迪&地址= 123 +主+街道&電子郵件=東西%40somewhere.com

<SCRIPT TYPE="TEXT/JAVASCRIPT"> 

var fnstr = document.getElementById("firstname").value; 
var fncutspace = fnstr.trim(); 
var fnrepspace = fncutspace.replace(/ /g,"+"); 
var fnfinal = fnrepspace.replace("@","%40"); 
var adstr = document.getElementById("address").value; 
var adcutspace = adstr.trim(); 
var adrepspace = adcutspace.replace(/ /g,"+"); 
var adfinal = adrepspace.replace("@","%40"); 
var emstr = emdocument.getElementById("firstname").value; 
var emcutspace = emstr.trim(); 
var emrepspace = emcutspace.replace(/ /g,"+"); 
var emfinal = emrepspace.replace("@","%40"); 
var domurl = "https://www.somewebsite.com/formhandler.php?&fname="; 
var secondchunk = "&address="; 
var thirdchunk = "&email="; 
var url = domurl + fnfinal + secondchunk + adfinal + thirdchunk + emfinal; 

function createurl() { 
document.getElementById("demo").innerHTML = url; 
} 
</SCRIPT> 

<FORM action="javascript:createurl()"> 
Fisrt Name:<INPUT id="firstname" TYPE="TEXT"><br> 
street address:<INPUT id="address" TYPE="TEXT"><br> 
email address:<INPUT id="email" TYPE="TEXT"><br> 
<input type="submit" value="GO"> 
</FORM> 

<p id="demo"></p> 

回答

1

如果它應該是基於用戶的輸入,你應該移動的變量聲明,並設置內部createurl

function createurl() { 
    var fnstr = document.getElementById("firstname").value; 
    var fncutspace = fnstr.trim(); 
    var fnrepspace = fncutspace.replace(/ /g,"+"); 
    var fnfinal = fnrepspace.replace("@","%40"); 
    // etc. 
    var url = domurl + fnfinal + secondchunk + adfinal + thirdchunk + emfinal; 

    document.getElementById("demo").innerHTML = url; 
} 

他們將被設置爲當前的輸入值,這樣,在函數被調用時。

作爲一個方面說明,是否有更好的方法來做所有這些替換沒有所有的變量?

您可以鏈中的方法調用:

var fnInput = document.getElementById('firstname'); 
var fnfinal = fnInput.value.trim().replace(/ /g,"+").replace("@","%40"); 
+0

謝謝,這是一個正確的方向的重要提示!但是當我把變量放在函數中時,我不再會得到「undefined」。什麼都沒有發生。任何想法爲什麼這可能是? –

+0

@Gordie你在使用[JavaScript調試器](http://www.browserstack.com/debugging-tools)嗎?如果沒有,你真的應該爲你的瀏覽器找到一個。 [試一試](http://jsfiddle.net/aHA2e/),我得到錯誤「* emdocument is not defined *。」。我認爲這應該是「文檔」而不是「文檔」? –

+0

我很尷尬謝謝,我一定會找到一個。我在記事本中寫了大部分內容,他們不允許瀏覽器插件。謝謝! –

-1

你應該使用encodeURIComponent(string)而不是你現在正在做的修剪/替換。

1
<FORM action="javascript:createurl()"> 
Fisrt Name:<INPUT id="firstname" TYPE="TEXT"><br> 
street address:<INPUT id="address" TYPE="TEXT"><br> 
email address:<INPUT id="email" TYPE="TEXT"><br> 
<input type="submit" value="GO"> 
</FORM> 

<p id="demo"></p> 

<SCRIPT TYPE="TEXT/JAVASCRIPT"> 

var fnstr = document.getElementById("firstname").value; 
var fncutspace = fnstr.trim(); 
var fnrepspace = fncutspace.replace(/ /g,"+"); 
var fnfinal = fnrepspace.replace("@","%40"); 
var adstr = document.getElementById("address").value; 
var adcutspace = adstr.trim(); 
var adrepspace = adcutspace.replace(/ /g,"+"); 
var adfinal = adrepspace.replace("@","%40"); 
var emstr = emdocument.getElementById("firstname").value; 
var emcutspace = emstr.trim(); 
var emrepspace = emcutspace.replace(/ /g,"+"); 
var emfinal = emrepspace.replace("@","%40"); 
var domurl = "https://www.somewebsite.com/formhandler.php?&fname="; 
var secondchunk = "&address="; 
var thirdchunk = "&email="; 
var url = domurl + fnfinal + secondchunk + adfinal + thirdchunk + emfinal; 

function createurl() { 
document.getElementById("demo").innerHTML = url; 
} 
</SCRIPT> 

您應該在window.onload回調函數中執行所有依賴於DOM的javascript函數。

window.onload = function() 
{ 
Javascript code goes here 
} 
+0

我把下面的腳本如你所說,但現在我只想找到「undefinedundefinedundefine ......」只是「未定義」 instaead。我對如何使用window.onload有些模糊。你會介意更新你的答案並向我展示這樣做的正確方法嗎?我將不勝感激,謝謝你的幫助。 –