【问题标题】:2 name attributes for a field in a form2 表单中字段的名称属性
【发布时间】:2012-09-11 22:01:58
【问题描述】:

我有一个脚本可以计算每个值并显示计算值。最后它还会从所有 div 中计算出已经计算的值

这里是html代码:

<td>
<div>
<input name="r" class="rate" type="text" maxlength="255" size="5" value />
<input name="p" class="pack" type="text" maxlength="255" size="5" value />
<span class="amount"></span>
</div>
</td>

<td>
<div>
<input name="r" class="rate" type="text" maxlength="255" size="5" value />
<input name="p" class="pack" type="text" maxlength="255" size="5" value />
<span class="amount"></span>
</div>
</td>

问题是我想将所有字段放在一个表单中,然后将它们提交到数据库。 但是,所有 div 都包含两个输入字段,名称分别为“r”和“p”。

所以,我有点卡在这里,因为我不知道如何使名称唯一或如何使用 POST 将它们传递到数据库。

这是计算脚本的样子:

<script type="text/javascript">//<![CDATA[ 

//any time the amount changes
$(document).ready(function() {
    $('input[name=r],input[name=p]').change(function(e) {
        var total = 0;
        var $row = $(this).parent();
        var rate = $row.find('input[name=r]').val();
        var pack = $row.find('input[name=p]').val();

        total = parseFloat(rate * pack);
        //update the row total
        $row.find('.amount').text(total);

        var total_amount = 0;
        $('.amount').each(function() {
            //Get the value
            var am= $(this).text();
            console.log(am);
            //if it's a number add it to the total
            if (IsNumeric(am)) {
                total_amount += parseFloat(am, 10);
            }
        });
        $('.total_amount').text(total_amount);
    });
});

//isNumeric function Stolen from: 
//http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric

function IsNumeric(input) {
    return (input - 0) == input && input.length > 0;
}
//]]>  

</script>

【问题讨论】:

  • 这在很大程度上取决于接收此表单的服务器端脚本。浏览器可以毫无问题地提交多个输入共享相同名称的表单;然而,接收脚本可能有。例如,PHP 不支持共享相同名称的输入,并且只会保留最新出现的输入,除非您将输入命名为 r[]p[],在这种情况下 PHP 会将它们视为数组值,您可以处理所有输入的值。
  • 所以,例如,如果我使用 name="p[]" 并通过使用 $p=$_POST['p[]'];它应该工作吗?
  • 不,如果你使用name="p[]",在PHP端你会收到$_POST['p'],这将是一个数组。 some documentation 怎么样?
  • 感谢 lanzz,我阅读了链接上的信息,如果您有 弄清楚。你能给我一个例子,什么应该是 应该是什么 PHP $POST 代码来获取值。对不起,我不是很擅长 php。谢谢。

标签: javascript forms post field


【解决方案1】:

HTML:

<input type="text" name="r[]">
<input type="text" name="p[]">
<hr>
<input type="text" name="r[]">
<input type="text" name="p[]">
<hr>
<input type="text" name="r[]">
<input type="text" name="p[]">

PHP:

for ($i = 0; $i < count($_POST['p']); $i++) {
    $rate = $_POST['r'][$i];
    $pack = $_POST['p'][$i];
    // do something with $rate and $pack
}

由于浏览器提交所有输入(即使没有输入任何值),并且按照规范,它按照 HTML 代码中定义的顺序提交它们,您可以相信两个 $_POST 数组中的元素将排列up 并且相应的 ratepack 将在各自数组中的相同索引处接收。

【讨论】:

  • 再次感谢 lanzz。我刚刚找到了解决方案的更好方法。而不是在 JScript 中使用 name 属性,我使用 id,这样我就可以为每个输入指定不同的名称 $('input[id=r],input[id=p]').change(function(e) {
  • 好的,现在我设法将所有内容链接到数据库,并且工作正常。我现在面临另一个问题...当您键入值时,我需要启动脚本正在执行的字段的计算,但是当您从数据库中获取值时它不会计算。知道我应该在脚本中更改什么以便在所有字段已经填充时计算它们。谢谢
  • 我建议您针对这个不相关的问题发布一个单独的问题。
猜你喜欢
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 2016-06-02
  • 1970-01-01
  • 2012-08-10
  • 2021-09-09
  • 2013-01-31
相关资源
最近更新 更多