Estoy desarrollando webapp utilizando jQuery. Tengo una funcionalidad que agrega una nueva fila de 3 campos de entrada. Después de crear estos elementos DOM, quiero enfocar uno de los campos de entrada. Lo estoy haciendo llamando a la función jQuery focus() en el campo de entrada necesario.jQuery focus() a veces no funciona en IE8
problema es que llamando enfoque() funciona bien en IE6 y FF3.5, pero no funciona en IE8.
yo estaba tratando de hacer sencillo ejemplo de trabajo de este problema para mostrarlo aquí, pero con versión simplificada del enfoque de código() está funcionando bien. Así que supongo que DOM aún no está listo cuando llamo a focus() en IE8. Para esto intenté llamar a setTimeout ('myFocus()', 400). Tuve éxito y, en algunos casos, el enfoque realmente funcionaba, pero aún no siempre. Aleatoriamente no enfoca mi campo de entrada.
pregunta es: ¿se ha enfrentado a problemas similares a nadie y ¿Alguien tiene alguna idea de cómo solucionar esto? Usar setTimeout parece una solución muy fea.
TNX por adelantado
Editado: 26.08.2009
tuvo éxito al reproducir el ejemplo sencillo. Aquí está el código HTML + JS que reproduce este error en IE8.
<html>
<head>
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
function performChanged() {
formChanged = true;
}
function handleChange() {
var parentDiv = $('#container');
newValue = $(html).html();
parentDiv.html(newValue);
$(".sel1",parentDiv).bind('change',handleChange);
//alert('Uncomment this and after alert focus will be on input');
$("input.cv_values",parentDiv).focus();
}
$(document).ready(function() {
$('.trackChange').bind('change', handleChange);
});
var html = '<div class=\"div1\">\n<select class=\"sel1\" id=\"sel1\" name=\"sel1\"><option value=\"\"><\/option>\n<option value=\"11\">Select me to see problem<\/option>\n<\/select>\n\n\n<input class=\"cv_values\" id=\"sel3\" name=\"sel3\" size=\"30\" type=\"text\" value=\"\" /><br/>Focus should in input field. With alert it is but without alert focus is not there</div>';
</script>
</head>
<body>
<select class="trackChange" onchange='performChanged();'>
<option value=""></option>
<option value="1" >Select me to generate new inputs</option>
</select>
<div id="container"></div>
</body>
para reproducir: 1) Valor de selección de la primera lista desplegable. Verá que la entrada de la primera vez está funcionando 2) seleccione el valor del segundo menú desplegable. Verás que el error se reproduce.
Luego, en el código puede comentar la línea donde se muestra la alerta JS(). Lo extraño es que si hay esta alerta() entonces después de que el enfoque está funcionando bien.
Espero que esto ayude a entender dónde está mi problema.
P.S. Necesito que mi aplicación funcione de esta manera: está regenerando esas entradas después de seleccionar el valor del menú desplegable. Este es un ejemplo simplificado de mi aplicación;).
publique el fragmento de código. hace las cosas más fáciles. – krishna
¿Ha intentado enfocarse en el evento de "carga" de la ventana (no en "DOMContentLoaded", a.k.a. - 'document.ready (...)' - one)? – kangax