Библиотека тегов jsp меняет имя флажка?
-
21-09-2019 - |
Вопрос
Я пытаюсь использовать флажок «Выбрать все», чтобы выбрать столбец флажков.
Поэтому я дал всем тем, кого хочу отметить, одно и то же имя. Элемент 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.