当它应该是-0.1或0.1时,parseFloat保持返回NaN

时间:2014-12-05 00:12:56

标签: javascript

当我在console.log中打印时,parseFloat应该是-0.1或0.1时保持返回NaN,我很可能只是累了,但我看不出问题。任何帮助都一如既往地非常感谢, 也没有在这里寻找jQuery答案,这必须是JS

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";
};

和html

<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>

3 个答案:

答案 0 :(得分:1)

我相信你的resizeText()函数中的this.value就是你的错误所在。你怎么想&#39;这个&#39;是指这里?我认为它现在将成为窗口对象。

答案 1 :(得分: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/

答案 2 :(得分:0)

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

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