我试图用一个选择所有复选框以选择复选框列。

所以我给了所有我想在检查过的那些曾经的同名 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);"/>
有帮助吗?

解决方案

下面是一种开球:

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属性所使用的模式。

其他提示

datafield属性用于提供一个对象属性(如r_object_idr_version_label等)作为数据发送到控制,这不会帮助许多在这种情况下。

一个不那么完美解决方案可以是设置runatclient="false"在DMF标记和引用由在相应的部件不同的名称的复选框;然后,而不是你的JavaScript可以使用组件类的Java方法来获取上的复选框手柄和修改它们的值。该WDK生成的复选框的名称属性取决于组件名称,可能是他们在JSP顺序,所以我不知道,如果它是一个好主意,认为WDK总是会产生的复选框相同的名称。然而,在组件类处理总是比一个JavaScript功能慢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top