我想要清除文本字段#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='';
答案 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)
,因为他们会考虑整个字符串,而不仅仅是第一部分。