如何使用带条件的javascript清除文本字段?

时间:2015-05-12 21:06:53

标签: javascript html

我想要清除文本字段#t1,文本字段#d1应该清除。但最后两行都不这样做....

function utl()
{

    var a = document.getElementById('t1');
    var z = document.getElementById('d1');
    if (a!=0)
        {
            var y = parseFloat(a.value) * 100;
            y = y || 0;
            z.value = y.toFixed(2);
        }
    else if (a==0)
        z.value = 0;
    else if (a=='')
        z='';

1 个答案:

答案 0 :(得分:1)

a是一个DOM元素,所以它总是!= 0,因为!=运算符会将它强制转换为字符串,然后转换为数字,该数字将是!= 0

您可能想要使用.value属性:

var a = document.getElementById('t1').value;

但是你仍然有问题:输入的value始终是一个字符串。在JavaScript中,==!=运算符会输入强制,""== 0。所以你的第三个陈述z=''永远不会到达。

您可以使用 strict 相等运算符来确定发生了什么:

var a = document.getElementById('t1').value;
var z = document.getElementById('d1');
if (a === "") {   // <== Note! === rather than ==
    z.value = "";
} else {
    a = +a; // Convert to number intentionally
    if (a != 0) {
        var y = a * 100;
        y = y || 0;
        z.value = y.toFixed(2);
    } else if (a == 0) {
        z.value = "0";
    }
}

严格平等(===)和不等式(!==)运算符不进行强制类型,因此尽管"" == 0为真,{ {1}}是假的。

我转换为数字的那一行:

"" === 0

...只是众多可用选项中的一种。使用a = +a; 转换为数字是最严格的方法,但您无法直接控制数字基数。你也可以使用:

+str

...假设您想要基数10(十进制),但请注意它们忽略尾随字符,因此a = parseInt(a, 10); // If you're expecting an integer, or a = parseFloat(a); // If it may have a fractional portion parseInt("123laksdjflk", 10)。相比之下,123(或+str)会说Number(str),因为他们会考虑整个字符串,而不仅仅是第一部分。