1

我正在构建一个基本的 jQuery 计算器。一切都很顺利,直到我尝试做互惠函数。我将它绑定到点击事件。代码看起来像这样

// 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将数字除以数字,并将文本框值设置为等于答案。但是当我单击按钮时,值保持不变。但是,当我在没有点击处理程序的情况下将代码放入 firebug 时,它工作得很好。我哪里错了?

小提琴

4

1 回答 1

1

你有 22 个键,在key.each循环中你一次又一次地绑定处理程序所以它执行 22 次。这意味着您的每个键都注册了 22 次相同的事件。因此,请考虑您所拥有的互惠情况。您正在从文本框中获取值并将其转换为它的倒数,这样一次,您就很好了。但它发生了 22 次,因此对相同值的偶数互逆运算本身返回相同的值。你也不需要使用eval. 只要做正确的操作。还要记住 javascript 执行浮点算术运算

  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);
    });
于 2013-09-14T01:55:01.883 回答