我有一个区域,其中包含一个包含循环的表单。当有人更改循环中的文本字段时,它会更新整个表单并循环onKeyUp事件。
我正试图找到一种方法告诉Tapestry将焦点返回到上次更新的文本字段。我认为我有这个工作,但区域更新似乎使文本字段在设置焦点后立即失去焦点。我可以将焦点设置为区域外的字段而不会出现问题,因此它似乎是导致问题的区域更新。
有关如何处理此事的任何建议吗?
答案 0 :(得分:5)
听起来你需要在重新加载区域后设置焦点。每当我需要执行这样的任务时,我会设置一个观察者来监听Javascript中Tapestry区域更新的事件:
$('formZone').observe(Tapestry.ZONE_UPDATED_EVENT, function(event) {
// set the focus
});
希望这有帮助。
答案 1 :(得分:3)
Form组件有autofocus
参数,默认情况下为true,导致使用表单呈现一些JavaScript。在表单加载后,JS将焦点设置为第一个表单元素。
将autofocus
设置为false
会禁用此行为:
<form t:type="Form" t:autofocus="false">
答案 2 :(得分:3)
我知道这是一个旧线程,但我所做的是:
使用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确保您不会遇到原型问题。