1

我有一个将用户定义的姓名和电子邮件地址写入 mysql 数据库的表单。我遇到问题的部分是我有表单的次要部分,它为复选框分配值,然后给你总和,它被定义为“总计”。我想将此总数写入同一个数据库。我是 JS 编码的新手,一旦用户确定了值,我不太确定如何传递总计。

<form name="form1">
    <input type="checkbox" name="check[]" data-weight="5" /> 5<br />
    <input type="checkbox" name="check[]" data-weight="10" /> 10<br />
    <input type="checkbox" name="check[]" data-weight="30" /> 30<br />
    <div>Total: <span id="total">0</span></div>
</form>

<script type="text/javascript">
    (function () {
        var totalEl = document.getElementById('total');
        var total = 0;
        var checkboxes = document.form1['check[]'];

        var handleClick = function () {
            total += parseInt(this.getAttribute('data-weight'), 10) * (this.checked ? 1 : -1);
            totalEl.innerHTML = total;
        };

        var l = checkboxes.length;
        for (i = 0; i < l; ++i) {
            checkboxes[i].onclick = handleClick;
        }
    }());
</script>
4

2 回答 2

1

首先:如果禁用Javascript,它应该工作吗?或者提交表单但可能错误/没有值写入数据库是否可以接受?

如果没关系

你从没有启用 Javascript 的用户那里得到什么,那么你可以接受AvL 的建议

但是,如果您想要正确的值

那么你应该确保你不依赖 Javascript 支持。您应该确保您的表单始终提供一致的值,即使它是在没有使用 Javascript 进行计算的情况下提交的。

在这种情况下,您应该在服务器端而不是客户端进行计算。当然,您可以在客户端进行计算,但问题是您只能为客户端用户界面(而不是最终数据)进行客户端数学运算。

我不了解您的服务器端处理,因此我不建议任何用于服务器端计算和/或将值保存到数据库的代码。因此我唯一的建议是你应该check[]在服务器端处理你的位数组。

如果您愿意,您可以更好地描述您的服务器/数据库/处理,并留下有关您的更改的注释作为对我的回答的评论。

更新: 这基本上是关于pst对您的问题的评论的更长解释。

于 2012-09-03T18:14:00.410 回答
0

您可以添加隐藏的输入元素:

<input id="totalChecked" type="hidden" name="total" value="0" />

并将以下内容添加到您的函数中:

document.getElementById('totalChecked').value = total;

看看这个小提琴

于 2012-09-03T15:25:28.593 回答