Как установить фокус после обновления зоны в Tapestry5 - PullRequest
2 голосов
/ 12 января 2011

У меня есть зона, которая содержит форму, которая содержит цикл. Когда кто-то изменяет текстовое поле в цикле, он обновляет всю форму и цикл в событии onKeyUp.

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

Любые предложения о том, как справиться с этим?

Ответы [ 3 ]

5 голосов
/ 14 января 2011

Похоже, вам нужно установить фокус после перезагрузки зоны. Всякий раз, когда мне нужно выполнить такую ​​задачу, я настраиваю наблюдателя, который прослушивает событие обновления зоны Гобелена в Javascript:

$('formZone').observe(Tapestry.ZONE_UPDATED_EVENT, function(event) {
    // set the focus
});   

Надеюсь, это поможет.

3 голосов
/ 12 октября 2012

Я знаю, что это старый поток, но я сделал следующее:

Используя jquery:

<t:zone t:id="formZone">
<t:form .... class="formId" t:zone="formZone>
.
.
</t:form>

jQuery.noConflict();
(function($) { 
  $(document).ready(function() {
      $(".formId").find("input, select").filter(function(){
          if($(this).val() == ""){           
             return true;
          }
        }).first().focus();

  });
})(jQuery);


</t:zone>

Это сфокусируется на первом пустом вводе или выборе.Конечно, вы должны включить JQuery на своей странице.noConflict гарантирует, что у вас не будет проблем с прототипом.

3 голосов
/ 12 января 2011

Компонент Форма имеет параметр autofocus, который по умолчанию имеет значение true, что приводит к отображению части JavaScript с формой.JS устанавливает фокус на первый элемент формы после загрузки формы.

Установка autofocus на false отключает это поведение:

<form t:type="Form" t:autofocus="false">
...