jsp标签库更改复选框名称?

时间:2009-12-23 09:37:12

标签: java javascript jsp jsp-tags wdk

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

所以我给了我想要同时检查的所有名称 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可以接受正则表达式,否则脚本将无效。

关于如何解决这个问题的任何想法?

复选框的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);"/>

2 个答案:

答案 0 :(得分:1)

datafield属性用于提供对象属性(例如r_object_idr_version_label等)作为控件的数据,这在这种情况下不会有太大帮助。

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

答案 1 :(得分:1)

这是一个启动:

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;
        }
    }
}

如果你知道在生成'mform_content_ABoxes_'属性时使用的模式,你最终可以将checkboxElement.name作为另一个函数参数传递,或者甚至从name中提取它。