Tôi đã đặt hộp văn bản trong chế độ xem lưới và tôi sử dụng phương thức Focus()
để khôi phục tiêu điểm sau khi mất hộp văn bản dự định. Vấn đề là:Cách ngăn phương thức Focus() di chuyển trang lên đầu trang
Trang (có thể cuộn) và khi tôi gọi phương pháp Focus, trong sự kiện thay đổi văn bản, trang nhảy lên trên cùng. Đó là một hành vi khó hiểu.
Câu hỏi của tôi là:
Có một số cách để ngăn chặn các phương pháp Focus()
từ nhảy trang đến đỉnh cao?
Mã của tôi:
protected void txt_evaluateWeights_TextChanged(object sender, EventArgs e)
{
calc();
int index = ((System.Web.UI.WebControls.GridViewRow)(((RadTextBox)sender).Parent.NamingContainer)).DataItemIndex;
((RadTextBox)gv_Evaluation.Rows[index + 1].Cells[3].FindControl("txt_evaluateWeights")).Focus();//Here is the problem.
}
Lưu ý:
tôi sử dụng
asp:TextBox
, và cùng một vấn đề.xem lưới của tôi trong một bảng cập nhật
EDIT:
Javascript workaround:
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;
}
try {
targetControl.focus();
if (focusTarget) {
focusTarget.contentEditable = oldContentEditableSetting;
}
}
catch (err) { }
}
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);
Cảm ơn chúng tôi rất nhiều vì giải pháp tuyệt vời này. Tôi chỉnh sửa câu hỏi của tôi, Bạn có đề xuất bất kỳ cải tiến nào cho mã này không? –
Tôi không thể thấy bất kỳ vấn đề nào với nó vào lúc này (chưa thực sự sử dụng nó). Vì vậy, nếu nó hoạt động tốt cho bạn trong các trình duyệt khác nhau, sau đó tôi muốn để nó một mình. – patmortech
nhưng những gì '===' có nghĩa là trong javascript? –