【问题标题】:Multiple row table with multiple submit buttons doesn't post submit array具有多个提交按钮的多行表不发布提交数组
【发布时间】:2016-07-15 16:23:10
【问题描述】:

这是我在这里“复制”的第二部分:Why does this multiple row table submit by row? Is this correct?

我修改了原代码:

<tr>
   <td><input type='text' name='first' value='mark'></td>
   <td><button type='submit'name='editbutton' value='1'>Edit</button></td>
</tr>
<tr>
   <td><input type='text' name='first' value='luke'></td>
   <td><button type='submit'name='editbutton' value='2'>Edit</button></td>
</tr>
<tr>
   <td><input type='text' name='first' value='john'></td>
   <td><button type='submit'name='editbutton' value='3'>Edit</button></td>
</tr>

到:

<tr>
   <td><input type='text' name='first[1]' value='mark'></td>
   <td><button type='submit'name='editbutton[1]' value='1'>Edit</button></td>
</tr>
<tr>
   <td><input type='text' name='first[2]' value='luke'></td>
   <td><button type='submit'name='editbutton[2]' value='2'>Edit</button></td>
</tr>
<tr>
   <td><input type='text' name='first[3]' value='john'></td>
   <td><button type='submit'name='editbutton[3]' value='3'>Edit</button></td>
</tr>

阅读帖子时,我希望看到一个包含两个主要索引的 $_POST (php) 数组:

 ['first'] => Array([1] => 'mark', [2] => 'luke', [3] => 'john'),
 ['editbutton'] => Array([1] => '1', [2] => '2', [3] => '3')

这不是我得到的。 'name' 索引构造正确,但提交按钮索引 'editbutton' 仅包含一个元素,即按下按钮的值。我想指望这一点,但这是正确的还是我再次指望当前服务器的行为?

谢谢。对不起,如果我在这里打死马。

【问题讨论】:

  • 我为此获得了风滚草奖!无论如何,我认为这是一个合法的问题。我按照给出的说明创建了数组,结果令我惊讶。我阅读了似乎适用的规范,但它在我的脑海中。请问,不触发的排列提交按钮是“null”且未发送,这是官方的吗?

标签: html forms


【解决方案1】:

关于你的问题,我认为你可以指望它。参考页面http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_button_name 表单上提供了两个按钮,但每次提交表单时服务器端只接收一个值。因此,据我所知,至少 PHP 和 ASP 只接受一个提交按钮值。但是从这个问题的公认答案 How $_POST workshttps://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/Sending_and_retrieving_form_data

我们可以看到它实际上是由浏览器定义的,也就是说浏览器发出的数据实际上并没有包含任何其他提交按钮的值。所以我认为我可以安全地假设所有其他语言都不会收到第二个提交按钮值,因为它从未从您的网络浏览器发送出去。

【讨论】:

  • 最后。这是 50 个。谢谢。
  • :-),很高兴我能帮上忙
【解决方案2】:

向表格添加点击事件监听器。使用 JavaScript,将 this 和兄弟姐妹的值推送到数组中并发布它。如果问题调查事件冒泡。不要忘记在您的侦听器中包含(e) 事件参数。

不要使用带有input type="submit" 的表单。使用vanilla XHR。通过点击事件监听器触发它。

xhttp.open("POST", "ajax_test.asp", true);

xhttp.send("fname=Henry&lname=Ford");

【讨论】:

  • 我实际上使用 jquery 来驱动这个表,但我想知道提交按钮数组的填充是否是标准行为。
  • 您不需要按钮,只需单击行。但是,如果您想在桌子上使用按钮 getElementsByTagName('button') 来获取按钮索引。然后你有 index # of row 来抓取数据。不需要硬编码 [1]、[2] 等。使用我提到的方法给你一个数组。
猜你喜欢
  • 1970-01-01
  • 2017-04-12
  • 2012-09-20
  • 1970-01-01
  • 2018-11-24
  • 1970-01-01
  • 2023-03-09
  • 2013-04-16
  • 1970-01-01
相关资源
最近更新 更多