我有一個區域包含一個包含循環的窗體。當某人更改循環內的文本字段時,它會更新整個表單並在onKeyUp事件上循環。如何在Tapestry5區域更新後設置焦點
我想找到一種方法來告訴Tapestry將焦點返回到上次更新的文本字段。我認爲我有這個工作,但區域更新似乎使焦點設置後立即失去焦點的文本字段。我可以將焦點設置在區域外的一個沒有問題的區域,因此它似乎是導致問題的區域更新。
有關如何處理此問題的任何建議?
我有一個區域包含一個包含循環的窗體。當某人更改循環內的文本字段時,它會更新整個表單並在onKeyUp事件上循環。如何在Tapestry5區域更新後設置焦點
我想找到一種方法來告訴Tapestry將焦點返回到上次更新的文本字段。我認爲我有這個工作,但區域更新似乎使焦點設置後立即失去焦點的文本字段。我可以將焦點設置在區域外的一個沒有問題的區域,因此它似乎是導致問題的區域更新。
有關如何處理此問題的任何建議?
聽起來像是你需要將焦點設置在區完成重裝後。每當我需要做一個任務一樣,我成立了偵聽JavaScript中的掛毯區更新的事件的觀察員:
$('formZone').observe(Tapestry.ZONE_UPDATED_EVENT, function(event) {
// set the focus
});
希望這有助於。
Form組件具有autofocus
參數,默認情況下該參數爲true,導致一小部分JavaScript與表單一起呈現。 JS在窗體加載後將焦點設置爲第一個窗體元素。
設置autofocus
到false
禁用此行爲:
<form t:type="Form" t:autofocus="false">
我知道這是一個古老的線程,但我所做的就是:
使用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可以確保你不會遇到原型問題。
謝謝。我實際上已經嘗試了這兩種方式,似乎並不是問題所在。我可以將焦點設置爲區域更新之外的任何字段,而不會出現問題。它只是在區域中的那些我不能讓光標保持活動狀態。 – Mark 2011-01-12 15:07:47