0

我有一个从数据库中的数据生成的表。它可能有 3 行和 2 个单元格。

每个单元格中都有一个复选框和 2 个隐藏的表单字段。

因此,典型的行可能如下所示:

<tr>
<td>
<input type="checkbox" id="Assign" onclick="setchanged(this);">
<input type="hidden" id="hfChanged" value="0">
<input type="hidden" id="hfAgentID value="272">
</td>
<td>
<input type="checkbox" id="Assign" onclick="setchanged(this);">
<input type="hidden" id="hfChanged" value="0">
<input type="hidden" id="hfAgentID value="324">
</td>
</tr>

要求是 - 单击复选框时,应将同一单元格中的 hfChanged 隐藏字段的值设置为 1。

这适用于 Internet Explorer:

function setchanged(me)
{
me.parentElement.all("hfChanged").value = 1;
}

如何在 Firefox 或 Chrome 等符合标准的浏览器中设置 hfChanged 的​​值?

4

3 回答 3

1

使用重复类而不是 ID

<tr>
    <td>
    <input type="checkbox" class="Assign" onclick="setchanged(this);">
    <input type="hidden" class="hfChanged" value="0">
    <input type="hidden" class="hfAgentID value="272">
    </td>
    <td>
    <input type="checkbox" class="Assign" onclick="setchanged(this);">
    <input type="hidden" class="hfChanged" value="0">
    <input type="hidden" class="hfAgentID value="324">
    </td>
</tr>

然后将您的函数更改为按类名选择,并迭代结果。

function setchanged(me) {
    var changed = me.parentNode.querySelectorAll(".hfChanged");

    for (var i = 0; i < changed.length; i++) {
        changed[i].value = 1;
    }
}

如果这对您很重要,该.querySelectorAll方法在 IE6/7 中将不起作用。如果是这样,不难调整一点以获得更大的兼容性。


我现在看到同一个牢房里只有一个。在这种情况下,您可以改为这样做。

function setchanged(me) {
    me.parentNode.querySelector(".hfChanged").value = 1;
}
于 2013-01-21T16:48:09.110 回答
0

此代码未经测试,但可以为您提供一个起点。

$("input[type=checkbox]").change(function(){
     $(this).siblings(".hfChanged").prop("value", this.checked ? 1 : 0);
});

注意:将 id 更改为 class。

于 2013-01-21T16:46:26.250 回答
0

您可以使用以下函数找出此答案中给出的下一个元素

function next(elem) {
    do {
        elem = elem.nextSibling;
    } while (elem && elem.nodeType != 1);
    return elem;        
}

工作演示在这里

代码:

function setchanged(me){
    next(me).value = me.checked == true ? 1 : 0;
}

function next(elem) {
    do {
        elem = elem.nextSibling;
    } while (elem && elem.nodeType != 1);
    return elem;        
}
于 2013-01-21T16:55:16.603 回答