3

你知道这是为什么

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

3 回答 3

5

您没有以第二种方式将值设置回元素上,您只是将其分配给局部变量,您仍然需要这样做document.getElementById(input).value = champ;

于 2013-10-15T08:49:21.000 回答
3

那是因为 ischamp是一个已分配input元素值的变量。

更改其值不会更改输入的值(因为它不是双向绑定,您只是为其分配了值

所以你需要直接定位 的value属性input来改变它的值


如果您试图避免在.value很多地方使用 ,则可以缓存input元素及其value用于不同用途。

function deleteInputOnClick(input){
    var champ = document.getElementById(input),
        value = champ.value;
    if(value=='E-mail'){
        champ.value = "";
    }
}
于 2013-10-15T08:52:31.177 回答
2

document.getElementById(input).value返回一个字符串值,同时document.getElementById(input)返回一个引用(一个对象)。因此,在一种情况下,仅更改了局部变量的值,在另一种情况下,原始对象仍链接到 DOM 值。

看看这个问题:Javascript by reference vs. by value

于 2013-10-15T08:48:32.400 回答