2014-12-05 118 views
0

当我在console.log中打印时,parseFloat总是返回NaN,当它应该是-0.1或0.1时,我最可能只是感到疲倦,但我可以'没有看到这个问题。任何帮助是极大的赞赏一如既往, 还没有寻找一个jQuery回答这里,这必须是JS当它应该是-0.1或0.1时,parseFloat总是返回NaN

function startUp() { 
    var fontButtons = document.getElementsByClassName("fontsizer"); 
    for (var i=0; i < fontButtons.length; i++) { 
    document.getElementsByClassName("fontsizer")[i].addEventListener("click", resizeText); 
    } 
}; 

window.onload = startUp; 

function resizeText() { 
    var fontChange = parseFloat(this.value); 
    console.log(fontChange); 
    if (document.body.style = "") { 
     document.body.setAttribute("style", "font-size:1.0em;"); 
    } 
    var currentFontSize = parseFloat(document.body.style.fontSize.replace('em', '')); 
    console.log(currentFontSize); 
    document.body.style.fontSize = (currentFontSize + fontChange) + "em"; 
}; 

<div id="fontbuttons"> 
<input class="fontsizer" value="-0.1" type="image" id="fontdown" alt="-" src="fontdown.png" /> 
<input class="fontsizer" value="0.1" type="image" id="fontup" alt="+" src="fontup.png" /> 
</div> 

回答

1

你有几个问题。

首先,则该属性设置为onclick和回调传递一个字符串将使用eval调用该函数和this将指向全局对象,所以使用addEventListener('click', resizeText)代替。


,你不能parseFloat与这样的字母一个数字 - 解析之前剥离出em

var currentFontSize = parseFloat(document.body.style.fontSize.replace('em', '')); 

,你是不是串联的添加。更改

document.body.style.fontSize = currentFontSize + fontChange + "em" 

document.body.style.fontSize = (currentFontSize + fontChange) + "em" 

工作演示:http://jsfiddle.net/8tv550us/

+0

好吧,除了第二部分,它仍然返回NaN,我更新了原始文章中的代码,有什么想法? – dav3ydark007 2014-12-05 00:43:55

+0

我觉得有些事情在我的话中是不正确的 – dav3ydark007 2014-12-05 01:00:19

1

我相信你THIS.VALUE内resizeText的HTML()函数是你的错误所在。你认为“这个”在这里指的是什么?我认为这会成为目前的窗口对象。

+0

你是正确的,但解释为何以及如何解决它。 – 2014-12-05 00:18:51

+0

啊,谢谢,应该是点击按钮的值。今天太多的代码哈哈谢谢 – dav3ydark007 2014-12-05 00:20:34

+0

任何想到为什么第二个解析返回NaN?我更新了我的代码 – dav3ydark007 2014-12-05 01:12:16

0

添加事件侦听器,而不是设置一个属性,this将指向正确的对象

document.getElementsByClassName("fontsizer")[i].addEventListener("click", resizeText);