我正在构建一个基本的jQuery计算器。一切都很顺利,直到我尝试做倒数功能。我把它绑定到了一个click事件。代码看起来像这样
// inverse is $(".row li.inverse")
inverse.on("click", function () {
// textBox is $("input#result")
var val = textBox.val(),
text = parseFloat(val),
recip = eval(1/text);
textBox.val(recip);
});
因此,点击具有班级inverse
的按钮,它应该获得input
中的内容的值,并将其转换为数字。然后它应该eval
将数字1除以数字,并将文本框值设置为等于答案。但是当我单击按钮时,值保持不变。但是,当我在没有点击处理程序的情况下将代码放入firebug时,它的工作正常。我哪里错了?
答案 0 :(得分:1)
你有22个密钥,在key.each
循环中你一次又一次地绑定处理程序所以它
执行22次。这意味着您的每个密钥都会注册22次相同的事件。所以考虑一下你的相互情况。您正在从文本框中获取值并将其转换为其倒数,因此这是一次,并且您很好。但它发生了22次,因此即使是相同值的倒数操作数也会返回相同的值。您也不需要使用eval
。做正确的操作。另外请记住javascript执行floating point arithmetic operation。
key.each(function () {
if (!$(this).is(functions)) {
$(this).on("click", function () {
var number = $(this).text();
// Inserts value of clicked button into the input
textBox.val(textBox.val() + number);
});
}
}); //<-- end it here
var clear = $(".row li.clear"),
backspace = $(".row li.back"),
equals = $(".row li.equals"),
inverse = $(".row li.inverse");
clear.on("click", function () {
// Clears the input value if the clear button is clicked
textBox.val('');
});
backspace.on("click", function () {
// Removes last character of input
});
equals.on("click", function () {
$("#function").text(textBox.val());
// Evaluates what is in the input
setTimeout(function () {
// Sets that to the value
textBox.val(eval(textBox.val()));
}, 1);
});
inverse.on("click", function () {
var val = textBox.val(),
text = parseFloat(val),
recip = eval(1 / text);
textBox.val(recip);
});