1

我有一个表格,表格中的id's 作为数组项重复。这是表格中的一行:

<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 的情况下传递适当的引用和/或如何updates[]在我的 JavaScript 中引用正确的实例?

4

3 回答 3

0

将updates_toggle() 更改为updates_toggle(dataId)。然后,您可以将输入元素传递给函数:

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/

于 2013-08-25T00:08:33.667 回答
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:只是我的想法,你的要求(这远远超出了一个简单的问题)是如此模糊,以至于我考虑不写任何东西。

一方面,其他开发人员可能会插话说,这并非在所有情况下都有效(当然它没有理由 ppl 使用 jQuery)另一方面,您可以记住类似“是的,等等..我需要它用于另一个结构,可以为我做这个”。

不要为了廉价的工作而滥用 SO,想想你自己的问题(你已经在第一轮答案中得到了所有的部分)并在你的问题上付出一些努力。

于 2013-08-25T00:47:13.227 回答
-1

把它放在你的 updates_toggle()

document.getElementById("updates[]").value = 1
于 2013-08-25T00:29:48.613 回答