【发布时间】:2009-12-23 09:37:11
【问题描述】:
我正在尝试使用全选复选框来选择一列复选框。
所以我给所有我想一次性检查的相同名称 ABoxesElement 以便我可以轻松地在 javascript 中检查它们。
但是,当我在 firefox 中使用 firebug 时,我可以看到复选框没有保留我给它们的名称,而是预先添加了组件名称,并在我的复选框中附加了一个自动递增的数字。
由于我不能在 getElementByName 中使用正则表达式,我该如何在多个复选框中设置相同的值。 (ID 用于其他用途).. 这是我的代码:
全选复选框
<dmf:checkbox
name="ABoxes"
onclick = 'selectAllACheckBoxes'
id="allABoxes"
runatclient="true"/>
我要选中的复选框之一的示例
<dmf:checkbox
name="ABoxesElement"
id="<%=...%>"
runatclient="true"/>
****Javascript 示例 ****
function selectAllCheckBoxes(source) {
var checked = source.checked
var cbName = source.name + 'Element';
var col = document.getElementsByName(cbName);
for (var i=0; i<col.length;i++)
{
col[i].checked = checked;
col[i].disabled = !checked;
}
}
当页面呈现时,我注意到各个复选框的名称不是 ABoxesElement 而是类似 component_nameAboxesElement_2 因此脚本将无法工作,除非 getElementsByName 可以接受正则表达式.
关于如何解决这个问题的任何想法?
checkbox 的 tld 有另一个属性
<attribute>
<name>datafield</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue> </attribute>
可以用它来存储“名称”,然后通过它访问元素吗?
编辑单个复选框的 HTML 输出
<input type="hidden" value="true" id="a1ON_hidden" name="mform_content_AboxesElement_hidden_2"/>
<input type="checkbox" onclick="setKeys(event);safeCall(selectAllCheckBoxes,this);" value="" title="Click here" id="a1ON" name="form_content_AboxesElement_2"/>
为全选复选框编辑 2 HTML 输出
<input type="hidden" name="mform_content_ABoxes_hidden_1" id="allABoxes_hidden" value="true"/>
<input type="checkbox" name="mform_content_ABoxes_1" id="marketsAll" title="Click to select" value="" onclick="setKeys(event);safeCall(selectAllCheckBoxes,this);"/>
【问题讨论】:
-
在编写JS时,请考虑生成的HTML输出。 JS 看到的只是 HTML DOM 树。你可以巧妙地利用它。您可以使用生成的 HTML 的最小可能提取来更新您的问题(至少是“全选”复选框和带有复选框的表格)。
标签: java javascript jsp jsp-tags wdk