2009-12-23 3 views
2

Я пытаюсь использовать флажок «Выбрать все», чтобы выбрать столбец флажков.jsp тег библиотека меняется флажок имя?

Таким образом, я дал все те, что хочу, сразу же с тем же именем ABoxesElement, чтобы я мог легко проверить их все на javascript.

Однако, когда я использую firebug в firefox, я вижу, что флажки не сохранили имя, которое я им предоставил, но предварительно запустили имя компонента и добавили автоинкрементный номер в мои флажки.

Поскольку я не могу использовать регулярное выражение в getElementByName, как я могу установить одинаковое значение в нескольких флажках. (ID используется для чего-то еще) .. вот мой код:

Выбрать все Checkbox

<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 не сможет принимать регулярные выражения.

Любые идеи о том, как обойти это?

ДВ для флажка имеет другой атрибут

<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"/> 

EDIT 2 HTML-ВЫХОД для SelectAll флажка

<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

ответ

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

закончил использовать что-то вроде этого, но он чувствует себя неэффективно, чтобы перебирать все флажки для каждой из моих категорий, но, я думаю, я не могу многого сделать, поскольку имя автоматически называется и автоматически увеличивается. ok – Ayrad

+0

Это только неэффективно, если у вас более 10 000 полей или около того (что может длиться одну секунду). Вы не можете получить его быстрее. – BalusC

1

Атрибут datafield используется, чтобы обеспечить свойства объекта (например, r_object_id, r_version_label и т. Д.) В качестве данных для элемента управления, который в этом случае не поможет.

Не так идеальным решением может быть установка runatclient="false" в тэг dmf и ссылка на флажки с разными именами в соответствующем компоненте; то вместо javascript вы можете использовать java-метод в классе компонентов, чтобы получить дескриптор флажков и изменить их значения. Атрибут WDK сгенерированный атрибут для этих флажков зависит от имени компонента и, вероятно, от их порядка в JSP, поэтому я не уверен, что его хорошая идея предположить, что WDK всегда будет генерировать одинаковые имена для флажков. Однако обработка в классе компонентов всегда будет медленнее, чем функция javascript.

+0

Можно ли использовать только стандартные флажки ввода html вместо dmf, если я действительно не использую их в другом месте? таким образом он не изменит имя – Ayrad

+1

AFAIK, вы должны иметь возможность использовать простые элементы управления HTML в своем jsp, но я не слишком уверен в том, как получить дескриптор своих значений, если вам понадобятся значения флажка в вашем компоненте класс. – Shantanu