He conjunto de cuadros de texto en un gridview y utilizo el método Focus()
para restaurar el foco después de perder ante el cuadro de texto previsto. El problema es:Cómo prevenir el método de enfoque() de desplazar la página hacia la parte superior
la página (desplazable) y cuando llamo el método de enfoque, en el evento de texto cambiado, el salto de página a la parte superior. Es un comportamiento tan confuso.
Mi pregunta es:
¿Hay alguna manera de evitar que el método Focus()
de saltar la página a la cima?
Mi código:
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.
}
Nota:
uso el
asp:TextBox
, y el mismo problema.Mi opinión de la rejilla en un panel de actualización
EDIT:
Javascript solución:
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);
Muchas gracias por esta gran solución. Edito mi pregunta. ¿Recomiendas alguna mejora a este código? –
No puedo ver ningún problema con él en este momento (realmente no lo he usado). Entonces, si funciona bien para usted en diferentes navegadores, entonces lo dejaría en paz. – patmortech
, pero ¿qué significa '===' en javascript? –