Java jsp标记库更改复选框名称?

Java jsp标记库更改复选框名称?,java,javascript,jsp,jsp-tags,wdk,Java,Javascript,Jsp,Jsp Tags,Wdk,我正在尝试使用“全选”复选框来选择一列复选框 因此,我给了所有我想要检查过的一次相同的名称aboxelement,以便我可以轻松地在javascript中检查它们 然而,当我在firefox中使用firebug时,我可以看到复选框并没有保留我给它们的名称,而是预先挂起了组件名称,并在复选框中添加了一个自动递增的数字 由于我不能在getElementByName中使用正则表达式,我如何在多个复选框中设置相同的值。(ID用于其他内容)。。这是我的密码: 选中所有复选框 <dmf:checkbo

我正在尝试使用“全选”复选框来选择一列复选框

因此,我给了所有我想要检查过的一次相同的名称aboxelement,以便我可以轻松地在javascript中检查它们

然而,当我在firefox中使用firebug时,我可以看到复选框并没有保留我给它们的名称,而是预先挂起了组件名称,并在复选框中添加了一个自动递增的数字

由于我不能在getElementByName中使用正则表达式,我如何在多个复选框中设置相同的值。(ID用于其他内容)。。这是我的密码:

选中所有复选框

<dmf:checkbox
name="ABoxes"
onclick = 'selectAllACheckBoxes'
id="allABoxes"  
runatclient="true"/>
<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"/>

我希望选中的复选框之一的示例

<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;                         
} 
}       
函数选择所有复选框(源){
var checked=source.checked
var cbName=source.name+'Element';
var col=document.getElementsByName(cbName);

对于(var i=0;i,
数据字段
属性用于向控件提供对象属性(例如
r\u object\u id
r\u version\u label
等),作为控件的数据,在这种情况下没有多大帮助

一个不太完美的解决方案可能是设置
runatclient=“false”
在您的dmf标记中,通过相应组件中的不同名称引用复选框;然后,您可以使用组件类中的java方法代替javascript来获取复选框的句柄并修改其值。复选框的WDK生成的名称属性取决于组件名称,可能还取决于它们在组件中的顺序JSP,因此我不确定假设WDK总是为复选框生成相同的名称是否是一个好主意。但是组件类中的处理总是比javascript函数慢。

这里有一个开始:

function selectAllCheckboxes(checkboxElement) {
    var allFormElements = checkboxElement.form.elements;
    for (var i = 0; i < allFormElements.length; i++) {
        var formElement = allFormElements[i];
        if (formElement.name.indexOf('mform_content_ABoxes_') == 0) { // Check if its name starts with particular string.
            formElement.checked = checkboxElement.checked;
        }
    }
}
函数选择所有复选框(复选框元素){
var allFormElements=checkboxElement.form.elements;
对于(var i=0;i

您最终可以将
'mform\u content\u ABoxes.
作为另一个函数参数传入,或者甚至从
checkboxElement.name
中提取它,如果您知道生成
name
属性时使用的模式。

编写JS时,请考虑生成的HTML输出。JS看到的只是HTML DOM树。你可以巧妙地利用它。你可以用生成的HTML的尽可能小的摘录更新你的问题(至少是“全选”复选框和带有复选框的表格)。如果我在其他地方没有真正使用dmf,我可以只使用常规html输入复选框而不是dmf吗?这样不会改变名称。您应该能够在jsp中使用普通html控件,但如果您需要组件类中的复选框值,我不太确定如何处理它们的值。最终使用类似这样的东西,但是循环检查我的每个类别的所有复选框感觉很低效,但是我想我做不了太多,因为名称是自动命名和自动递增的。尽管如此,它仍然足够快,所以这是确定的。只有当你有10000多个字段时(可能会持续一秒钟)才是低效的你再快也得不到了。
<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);"/>
function selectAllCheckboxes(checkboxElement) {
    var allFormElements = checkboxElement.form.elements;
    for (var i = 0; i < allFormElements.length; i++) {
        var formElement = allFormElements[i];
        if (formElement.name.indexOf('mform_content_ABoxes_') == 0) { // Check if its name starts with particular string.
            formElement.checked = checkboxElement.checked;
        }
    }
}