2012-02-23 3 views
0

Моя цель - установить фокус на определенный inputText.Установить id для inputText в итераторе

Как кажется, нет возможности сделать это автоматически с помощью свойства tr: inputText, я пытаюсь использовать Javascript.

Для document.getElementById Мне нужен идентификатор обработанного html <input>. Я пытаюсь установить этот идентификатор на правильный индекс. Однако он отображается с идентификатором varFieldIterator:0:varField, где число 0 поступает от итератора и отличается в зависимости от моего начального значения selectStart. Если я начинаю с selectStart = 10, первый индекс для текстового поля 10 равен 0. Если я начинаю с 15, а затем получаю PPR для отображения первых 15 текстовых полей, они получают идентификатор, начинающийся с 16.

Я думаю, что код будет ясно, что я пытаюсь достичь:

<tr:iterator 
    id="varFieldIterator" 
    value="#{myController.form.model.fieldList}" 
    var="field" 
    rows="15" 
    first="#{{myController.form.model.selectionStart}" 
    varStatus="status"> 
    <tr:inputText 
     id="varField#{status.index}" 
     value="#{field.value}" 
     label="Text #{status.index +1}"> 
</tr:iterator> 

<tr:inputHidden 
    id="FOCUS_TEXT" 
    value="#{myController.form.model.endFocus}"></tr:inputHidden> 
<trh:script> 
window.onload = function() { document.getElementById('varField' + document.getElementById('FOCUS_TEXT').value).focus(); } 
</trh:script> 

ответ

1

Хотя атрибут ID принимает выражения EL, она устанавливается только во время сборки вида, а не во время зрения времени визуализации. Поэтому, если вы использовали тег времени построения представления, такой как JSTL <c:forEach>, он бы сработал. Но этот тег может иметь undesireable side effects.

Я бы рекомендовал просто изменить вашу функцию JavaScript, чтобы она больше не зависела от идентификаторов. Неясно, какова вся ваша структура HTML-дома, и если вы используете jQuery или нет, что упростило бы обход HTML DOM.

С равнинных JS, вы могли бы, например, просто grab the first form, а затем захватить свой первый входной элемент:

document.forms[0].elements[0].focus(); 

Или вы могли бы grab input elements by tag name:

document.getElementsByTagName("input")[0].focus(); 

Или вы могли бы дать им все имя класса например <tr:inputText styleClass="specificInput"> и grab them by class name:

document.getElementsByClassName("specificInput")[0].focus(); 

Эти звонки связаны друг с другом. Так что, если вы знаете, что это внутри <h:form id="myForm"> то вы могли бы также сделать, например:

document.getElementById("myForm").getElementsByTagName("input")[0].focus(); 
+0

Хотя простое решение установить ID независимо от числа итератора не работали, ваше предложение, тем не менее помогли найти обходной путь. – stracktracer