2015-05-12 45 views
-1

我想如果我清除文本字段#t1,文本字段#d1应该清除。但最后两行不这样做....如何使用JavaScript条件清除文本字段?

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=''; 
+2

你的调查揭示了什么?功能里面你认为问题在哪里? – Cristik

+0

另外,你是否粘贴了整个功能?我没看到右大括号。 – Cristik

+0

如果你没有像第一个其他的那样设置z的值。 – BSMP

回答

1

a是一个DOM元素,所以它总是会!= 0!=运营商将其强制为一个字符串,然后一个数字,那号码将是!= 0

你可能想用.value属性:

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

但你还是有一个问题:输入的value始终是一个字符串。在JavaScript中,==!=运营商进行类型强制转换,""==0。所以你的第三个陈述z=''永远不会被达到。

可以使用严格平等运营商要弄清楚这是怎么回事:

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为真,"" === 0为假。

那行,我转换成一个数字:

a = +a; 

...只是现有的许多选项之一。使用+str转换为数字是最严格的方式,但您无法直接控制数字库。你也可以使用:

a = parseInt(a, 10); // If you're expecting an integer, or 
a = parseFloat(a); // If it may have a fractional portion 

...假设你想基数10(十进制),但请注意,忽略尾随字符等parseInt("123laksdjflk", 10)123。相反,+str(或Number(str))会说这是Nan,因为他们考虑整个字符串,而不仅仅是第一部分。