我有一个表格,其中id
是重复的数组项目。这是表中的一行:
<tr>
<td>
<input name="data[]" id="data[]" onkeyup="updates_toggle(this);" value="<?php echo($item['data']); ?>" size="40" maxlength="100"/>
</td>
<td>
<input name="VAT_in[]" id="VAT_in[]" onkeyup="updates_toggle(this);" value="<?php echo($item['VAT_in']); ?>" size="8" maxlength="10"/>
<input type="hidden" size="1" name="updates[]" id="updates[]" value="0"/>
</td>
</tr>
<script type="text/javascript">
function updates_toggle(this_ref){
if(ups=this_ref.???????????('updates[]')){
ups.value="1";
}
return true;
}
</script>
我希望updates_toggle()
JavaScript函数将该行的隐藏updates[]
值更新为“1”;以便我可以在提交表单后更新数据库(仅针对已更改的项目)。
如何在不使用jQuery的情况下传递适当的引用和/或如何在JavaScript中引用updates[]
的正确实例?
答案 0 :(得分:0)
更改 updates_toggle() 至 updates_toggle(DATAID)。 然后,您可以将input元素传递给函数:
onKeyUp="updates_toggle(this);"
在您的函数中,您可以识别 tr 类型中最接近的父元素,并在此标记内找到隐藏字段。使用jQuery,这看起来像这样:
$(this).closest('tr').find('input[type=hidden]').val(1);
使用纯JavaScript,该函数如下所示:
function updates_toggle(field) {
var p = field.parentNode;
while(p.tagName != 'TR') {
p = p.parentNode;
}
var oldVal = p.children[1].children[1].value;
p.children[1].children[1].value = oldVal + 1;
}
我在这里解决了你的例子(我稍微清理了一下代码):http://jsfiddle.net/Tfk3C/2/
答案 1 :(得分:0)
免责声明:两个版本都需要“简单”的表格结构
<tr>
<td>[inputs]</td>
<td>[inputs]</td>
<td>[inputs]</td>
[...]
</tr>
对于更深层的结构,请参阅@ user1690752查找父tr和“递归”以搜索更新[]。
具有固定输入数量的结构的版本
<script type="text/javascript">
function updates_toggle(self) {
var element = self.parentNode.parentNode.getElementsByTagName("input")[2];
element.value = 1;
}
</script>
这需要
updates_toggle(this)
如果输入字段的数量发生变化,则必须相应地更新该功能。
具有任意数量输入的结构的版本
<script type="text/javascript">
function updates_toggle(self) {
var elements = self.parentNode.parentNode;
var element = searchingChilds(elements.childNodes);
if (element) {
element.value = 1;
}
}
function searchingChilds(tr) {
for (var element in tr) {
var subelement = tr[element];
if (subelement.nodeName === "TD") {
for (var subtd in subelement.childNodes) {
var subsubelement = subelement.childNodes[subtd];
if(subsubelement.nodeName === "INPUT" && subsubelement.attributes.id.value === "updates[]") {
return subsubelement;
}
}
}
}
return null;
}
</script>
PS:从我的脑海中浮现出一些东西,你的要求(这超出了一个简单的问题)是如此模糊,以至于我认为没有写任何东西。
另一方面,其他开发人员可以插入并说,这在所有情况下都不起作用(当然它没有一个reaeson ppl使用jQuery)另一方面你可以记住的东西沿着“是的等等......我还需要另一个结构,可以为我做这件事”。
不要滥用SO来获得廉价的工作能力,自己考虑一下你的问题(你已经在第一轮答案中得到了所有内容)并在你的问题上付出了一些努力。
答案 2 :(得分:-1)
将此内容放入您的updates_toggle()
中document.getElementById("updates[]").value = 1