【问题标题】:Is there a way to read hidden inputs with array-like names correctly in all browsers?有没有办法在所有浏览器中正确读取具有类似数组名称的隐藏输入?
【发布时间】:2015-06-19 13:25:18
【问题描述】:

一个界面有许多隐藏的输入,称为“kilos[]”或“precio[]”。然后将它们传递给一个 PHP 函数,该函数像数组一样处理它们。这一切都很好。但是,如果我需要从表中删除一行 (tr)(输入也将被删除),那么我执行以下操作:

var e=t.parentNode.parentNode;
var ix=e.sectionRowIndex;
var p=e.parentNode;
var f2=t.form;
var kl= p.rows.length > 2 ? f2.elements["kilos[]"][ix].value : f2.elements["kilos[]"].value;
var pc= p.rows.length > 2 ? f2.elements["precio[]"][ix].value:f2.elements["precio[]"].value;
f2.tokilos.value-=parseFloat(kl).toFixed(2);
f2.tomonet.value-=parseFloat(pc).toFixed(2);
f2.totamb.value-=parseFloat(kl).toFixed(2);
p.removeChild(e);

请注意,此代码在 Chrome 中有效,在其他任何地方都无效。您能看出需要做什么才能获得“kilos[]”和“precio[]”的正确值吗?

如果表中剩余的总行数大于2,那么我可以使用:

f2.elements["kilos[]"][ix].value

但是,如果行数不大于2,我需要这样做,而不是:

f2.elements["kilos[]"].value

这是它工作的唯一方法,而且只能在 Chrome 中使用。 sectionRowIndex 始终返回正确的值;当 tbody 中的行数仅为 1(最后一个)时,form.elements["name[]"][ix].value 本身的行为并不符合预期。该代码有效并完成了我需要完成的工作;然而,奇怪的是需要这样的解决方法。

有没有办法使用纯 javascript 在所有浏览器中实现这一点?

【问题讨论】:

  • 仅供参考,sectionRowIndexrowIndex 将是可怕的标签。标签用于对问题进行分类,并允许我们按兴趣关注标签。你认为谁会对“rowIndex”感兴趣? ;)

标签: javascript php arrays html dom


【解决方案1】:

您可以使用document.getElementsByName('kilos[]'),它将始终返回一个类似数组的对象。

如果要将搜索限制在特定元素,可以使用querySelectorAll

var inputs = f2.querySelectorAll('[name="kilos[]"]');
// or
 var inputs = document.querySelectorAll('#formID [name="kilos[]"]');

【讨论】:

  • 但是,这里的问题是为什么 form.elements["name"][index] only 如果 tbody 包含多于 1 行,则可以正常工作。此外,它仅适用于 Chrome。 JavaScript 离值得信赖的标准还很远吗?
  • @user3599566:这与 JavaScript 无关,它是 DOM 接口。见w3.org/TR/html5/…。基本上,它形式化了,如果只有一个具有给定名称的元素,则应该返回它。
  • 另外,我需要在表单中找到元素(数组),而不是在文档中;用户可能打开了多个表单(每个表单的 ID 不同)。我一直无法找到可以按名称查找元素的表单方法;但我现在正在尝试。如果我的 SPA 只有一份文件,那就行了;但是可以在任何时候打开任意数量的相同表单(具有不同的数据)。
  • 以下对我来说非常有效! var kl= f2.querySelectorAll('[name="kilos[]"]')[ix].value; var pc= f2.querySelectorAll('[name="precio[]"]')[ix].value;
  • 不用担心,至少您可以通过单击旁边的勾号轮廓来“接受”答案。
猜你喜欢
  • 2021-04-27
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 2021-04-28
相关资源
最近更新 更多