如何评估互惠函数

时间:2013-09-14 01:34:49

标签: jquery calculated-field

我正在构建一个基本的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时,它的工作正常。我哪里错了?

Fiddle

1 个答案:

答案 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);
    });