Библиотека тегов jsp меняет имя флажка? - PullRequest
2 голосов
/ 23 декабря 2009

Я пытаюсь использовать флажок выбрать все, чтобы выбрать столбец флажков.

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

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

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

Установите флажок Все

<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 for имеет другой атрибут

  <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 для флажка 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);"/>

Ответы [ 2 ]

1 голос
/ 23 декабря 2009

Вот начальный удар:

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.

1 голос
/ 23 декабря 2009

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

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

...