从表单输入计算数据而不使用eval()

时间:2015-06-24 19:00:33

标签: javascript

在过去的一学年,我从高中毕业,现在我是一家小型网络营销公司的实习生。我目前的任务是开发在线价格估算器,以便销售人员能够快速为我们的服务提供一致的估算。这是我的第一个Javascript项目。我之前在js中完成的最先进的事情只是几个小而基本的dom操作任务。

我发现一个网站的估算器几乎和我需要的一样强大。所以我正在阅读他们的代码以弄清楚它是如何工作的,所以我可以创建自己的版本。我被告知在用户提交的数据上使用eval()是不好的做法。所以,我想知道在这段代码中用什么替换eval()。

    frm = document.form1;

    for (var i = 0; i < document.form1.elements.length; i++) {
        if (frm.elements[i].type == 'checkbox' || frm.elements[i].type                    == 'radio') {
            if (frm.elements[i].checked) {
            v = eval("frm.val" + frm.elements[i].value);
            mult = eval("frm.mult" + frm.elements[i].value);
            mult = mult.value;
            if (mult == '') {
                mult = 1
            } else {
                mult = parseInt(mult)
            }
            hrs = hrs + parseInt(v.value) * mult;
            var cur_val = frm.elements[i].title;
            var make_rfp = cur_val.replace("___", mult);
            document.getElementById('quote_des').value += make_rfp + "\n";
            }
        }
    }

以下是我从以下网站提取此代码的网站:https://www.designquote.net/html/dq_estimate_wizard.cfm

1 个答案:

答案 0 :(得分:1)

Eval是不好的做法,因为它执行纯javascript,如果你允许你的用户在文本字段中键入任何js然后执行它,你已经建立了crosssitescripting的邀请;-) 它允许您的用户更改您网站上的内容,甚至可以将一些操纵数据发送回您的服务器 - 如果您有的话。

您正在寻找的是像mathjs这样的库,它将String解释为数学公式。你可以在这里找到更多相关信息 Evaluating a string as a mathematical expression in JavaScript

另一个选择是编写自己的公式解析器,如果图书馆不能做你需要的,但这将是一些更多的工作。