He visto un par de preguntas con respecto a los modales de bootstrap, pero ninguna exactamente como esta, así que seguiré adelante.
Tengo un modal que llamo onclick así ...
$(".modal-link").click(function(event){
$("#modal-content").modal('show');
});
Esto funciona bien, pero cuando muestro el modal quiero centrarme en el primer elemento de entrada ... En muchos casos, el primer elemento de entrada tiene una identificación de #photo_name.
Así que lo intenté
$(".modal-link").click(function(event){
$("#modal-content").modal('show');
$("input#photo_name").focus();
});
Pero esto fue en vano. Por último, traté de vincularme al evento 'show' pero aun así, la entrada no se enfocará. Por último, solo para probar, ya que sospechaba que se trataba del orden de carga de js, puse un setTimeout solo para ver si me demoraba un segundo, ¿funcionará el enfoque, y sí, funciona! Pero este método es obviamente una porquería. ¿Hay alguna manera de tener el mismo efecto que a continuación sin usar un setTimeout?
$("#modal-content").on('show', function(event){
window.setTimeout(function(){
$(event.currentTarget).find('input#photo_name').first().focus()
}, 0500);
});
Solo quería decir que Bootstrap 3 maneja esto un poco diferente. El nombre del evento es "shown.bs.modal".
o poner el foco en la primera entrada visible como esta:
http://getbootstrap.com/javascript/#modals
fuente
Estoy usando esto en mi diseño para capturar todos los modales y enfocarme en la primera entrada
fuente
$(this).find('input:visible').focus();
Tuve el mismo problema con bootstrap 3, enfóqueme cuando hago clic en el enlace, pero no cuando desencadenar el evento con javascript. La solución:
¡Probablemente sea algo sobre la animación!
fuente
Tuve problemas para detectar el evento "shown.bs.modal" ... Y esta es mi solución que funciona perfectamente ...
En cambio simple en ():
Usar en () con elemento delegado:
fuente
Parece que es porque la animación modal está habilitada (
fade
en la clase del cuadro de diálogo), después de llamar.modal('show')
, el cuadro de diálogo no es visible de inmediato, por lo que no puede enfocarse en este momento.Se me ocurren dos formas de resolver este problema:
fade
de la clase, de modo que el diálogo sea visible inmediatamente después de llamar.modal('show')
. Puede ver http://codebins.com/bin/4ldqp7x/4 para la demostración. (Lo siento @keyur, edité y guardé por error como nueva versión de tu ejemplo)focus()
enshown
caso de lo que escribió @keyur.fuente
He creado una forma dinámica de llamar a cada evento automáticamente. Es perfecto para enfocar un campo, porque llama al evento solo una vez, eliminándolo después de su uso.
Solo necesita llamar
modalEvents()
al documento listo.Utilizar:
Por lo tanto, puede usar el mismo modal para cargar lo que desee sin preocuparse por eliminar eventos cada vez.
fuente
Tuve el mismo problema con el bootstrap 3 y lo resolví así:
fuente
Bootstrap ha agregado un evento cargado.
https://getbootstrap.com/docs/3.3/javascript/#modals
capturar el evento 'loaded.bs.modal' en el modal
fuente
Evento de espectáculo modal Bootstrap
})
fuente
Una solución un poco más limpia y más modular podría ser:
O usando su ID como ejemplo en su lugar:
Espero que ayude..
fuente