我在具有更新面板的页面中有四个控件。最初鼠标焦点设置为第一个控件。当我将页面部分回传到服务器时,焦点会自动移到从我控制下的最后一个聚焦控件开始的第一个控件。有没有办法维持最后的焦点?如何在页面部分回传后在UpdatePanel中保持焦点位置
5
A
回答
10
在Restoring Lost Focus in the Update Panel with Auto Post-Back Controls看看:
解决方案背后的基本思想是用输入焦点保存控制 的ID更新面板更新之前并设置输入后 焦点返回到控制更新面板被更新。
我附带以下JavaScript恢复丢失的焦点 更新面板。
var lastFocusedControlId = ""; function focusHandler(e) { document.activeElement = e.originalTarget; } function appInit() { if (typeof(window.addEventListener) !== "undefined") { window.addEventListener("focus", focusHandler, true); } Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(pageLoadingHandler); Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoadedHandler); } function pageLoadingHandler(sender, args) { lastFocusedControlId = typeof(document.activeElement) === "undefined" ? "" : document.activeElement.id; } function focusControl(targetControl) { if (Sys.Browser.agent === Sys.Browser.InternetExplorer) { var focusTarget = targetControl; if (focusTarget && (typeof(focusTarget.contentEditable) !== "undefined")) { oldContentEditableSetting = focusTarget.contentEditable; focusTarget.contentEditable = false; } else { focusTarget = null; } targetControl.focus(); if (focusTarget) { focusTarget.contentEditable = oldContentEditableSetting; } } else { targetControl.focus(); } } function pageLoadedHandler(sender, args) { if (typeof(lastFocusedControlId) !== "undefined" && lastFocusedControlId != "") { var newFocused = $get(lastFocusedControlId); if (newFocused) { focusControl(newFocused); } } } Sys.Application.add_init(appInit);
3
我觉得这更优雅:
(function(){
var focusElement;
function restoreFocus(){
if(focusElement){
if(focusElement.id){
$('#'+focusElement.id).focus();
} else {
$(focusElement).focus();
}
}
}
$(document).ready(function() {
$(document).on('focusin', function(objectData){
focusElement = objectData.currentTarget.activeElement;
});
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(restoreFocus);
});
})();
相关问题
- 1. 如何在UpdatePanel部分回传后保留javascripts
- 2. 锚点击并保持页面位置?
- 3. 保持页面位置上回发
- 4. 如何在ajax/jquery界面中保持页面位置
- 5. 如何在回传中保持DragPanelExtender的位置?
- 6. 如何保持页脚保持在页面底部用JavaScript
- 7. 如何在UpdatePanel回发后保留TinyMCE
- 8. 如何保持在asp.net页面回发
- 9. 如何将焦点设置在页面顶部
- 10. MVC3中的页面刷新后,如何保持焦点位于用户所在的同一字段
- 11. 在向导页面中设置焦点的位置?
- 12. HtmlEditorExtender Ajax控制 - 回传(无论是否为异步)窃取焦点 - 页面不保持滚动位置
- 13. 悬停后保持焦点
- 14. 如何保持整个页面滚动位置异步回
- 15. 如何保持页面位置并专注于回发
- 16. 在部分页面回发后选择UpdatePanel中的ASP.NET文本框的内容
- 17. 如何在jquery刷新后保持焦点在文本字段
- 18. 在失去焦点后保持焦点级别的按钮
- 19. 如何在页面加载时保持div的滚动位置
- 20. 在UpdatePanel中回传
- 21. 如何在点击链接后保留wx.html.HtmlWindow中的页面位置?
- 22. 表单文本框 - 在页面加载时保持焦点
- 23. 如何在顶部页面重新加载时保持iframe位置
- 24. 即使在更新页面后,如何保持星级评分
- 25. UpdatePanel中的RegisterPostBackControls部分回发后
- 26. 焦点ScrollView在页面顶部android
- 27. 如何在执行jquery事件后保持页面滚动位置?
- 28. 在Jquery中加载页面后设置焦点?
- 29. 如何在提交后获得React Native TextInput以保持焦点?
- 30. 如何在页面滚动时将页眉保持在固定位置