2013-10-15 41 views
2

你知道爲什麼這個的getElementById不能獲得價值

function deleteInputOnClick(input){ 
    champ = document.getElementById(input); 
    if(champ.value =='E-mail'){ 
     champ.value = ""; 
    } 
} 

的作品,但這種方式

function deleteInputOnClick(input){ 
    champ = document.getElementById(input).value; 
    if(champ=='E-mail'){ 
     champ= ""; 
    } 
} 

它不?

這可能是一個愚蠢的小錯誤,但我真的不知道它可能在哪裏。

感謝的

回答

4

你沒有設置值回到了第二種方式的元素,你只是將其分配到一個局部變量,你仍然需要做document.getElementById(input).value = champ;

+2

第一種方式是正確的做法,因爲冠軍成爲一個DOM對象,你可以隨時操作的價值,而在第二個方式,你可以提取值到一個變量,所以你不能使用相同的設置回變量 – Ahmad

1

document.getElementById(input).valuedocument.getElementById(input)返回一個參考(即目標)返回一個字符串值。所以在一種情況下,只有局部變量的值被改變,另一種情況下原始對象仍然鏈接到DOM值。

看一看這個問題:Javascript by reference vs. by value

1

這是因爲champ是一個已被賦值爲input元素的變量。

改變它的值不會改變輸入的值(因爲它不是一個雙向綁定,您剛分配的價值,它

所以你需要直接針對的value財產在input改變其價值


如果你正試圖避免使用.value了很多地方,你可以同時緩存的input元素及其value不同用途..

function deleteInputOnClick(input){ 
    var champ = document.getElementById(input), 
     value = champ.value; 
    if(value=='E-mail'){ 
     champ.value = ""; 
    } 
}