Вопрос

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

Поэтому я дал всем тем, кого хочу отметить, одно и то же имя. Элемент ABoxesElement так что я могу легко проверить их все в JavaScript.

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

Поскольку я не могу использовать регулярное выражение в 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 но что-то вроде имя_компонентаAboxesElement_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_id,r_version_label и т. д.) в качестве данных для элемента управления, что в данном случае не сильно поможет.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top