Javascript函数引用数组输入字段

时间:2013-08-24 23:59:11

标签: javascript html

我有一个表格,其中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[]的正确实例?

3 个答案:

答案 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