2009-12-23 35 views
2

我正在尝试使用全选复选框来选择一列复选框。jsp标签库更改复选框名称?

因此,我给所有我想要立即检查的同名ABoxesElement,以便我可以轻松地在javascript中检查它们。

但是,当我在firefox中使用firebug时,我可以看到复选框没有保留我给他们的名字,但是预先输入了组件名称,并在我的复选框中附加了一个自动递增的数字。

既然不能在getElementByName使用正则表达式我怎么能去有关设置多个复选框相同的值。 (ID用于别的东西)..这里是我的代码:

全部选中复选框,我想检查

<dmf:checkbox 
name="ABoxesElement" 
id="<%=...%>" 
runatclient="true"/> 

复选框之一

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

可以用它来存放“名称”,然后通过它访问元素?

EDIT 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);"/> 
+0

在编写JS时,请考虑生成的HTML输出。 JS看到的只是HTML DOM树。你可以巧妙地利用它。您可以使用生成的HTML的最小可能提取来更新您的问题(至少“选择全部”复选框和带有复选框的表格)。 – BalusC 2009-12-23 16:27:30

回答

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

+0

结束了使用这样的事情,但它感觉没有效率循环遍历我的每个类别的所有复选框,但我想我不能做很多,因为名称是自动命名和自动递增..它仍然够快,尽管这样好吧 – Ayrad 2009-12-24 15:05:33

+0

如果你有超过10,000个字段左右(这可能会持续一秒),它只会是低效率的。你不能更快地获得它。 – BalusC 2009-12-24 15:10:22

1

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

一个不那么完美的解决方案可能是设置在DMF标签runatclient="false"并引用通过在相应的元件不同名称的复选框;那么代替javascript,您可以在组件类中使用java方法来获取复选框的句柄并修改它们的值。该WDK生成的复选框的名称属性取决于组件名称,可能是他们在JSP顺序,所以我不知道,如果它是一个好主意,认为WDK总是会产生的复选框相同的名称。但是,组件类中的处理总是比JavaScript函数慢。

+0

如果我不真的在其他地方使用它,我可以使用常规的html输入复选框而不是dmf吗?这样它不会改变名称 – Ayrad 2009-12-24 08:58:58

+1

AFAIK你应该能够在你的jsp中使用纯HTML控件,但是我不太确定如何在你的组件中使用复选框的值来处理它们的值类。 – Shantanu 2009-12-24 14:39:21