javascript - Hvordan sette fokus på et bestemt felt i en Bootstrap-modal når den vises
Jeg har sett et par spørsmål angående bootstrap-modaler, men ingen helt som dette, så jeg går videre.
Jeg har en modal som jeg kaller onclick slik...
$(".modal-link").click(function(event){
$("#modal-content").modal('show');
});
Dette fungerer fint, men når jeg viser modalen vil jeg fokusere på det første input-elementet... I mitt tilfelle har det første input-elementet en id på #photo_name.
Så jeg prøvde
$(".modal-link").click(function(event){
$("#modal-content").modal('show');
$("input#photo_name").focus();
});
Men dette var forgjeves. Til slutt prøvde jeg å knytte til 'show'-hendelsen, men selv da vil ikke inputen få fokus. Til slutt, bare for testing, siden jeg hadde en mistanke om at dette handler om rekkefølgen på js-lasting, satte jeg inn en setTimeout bare for å se om jeg forsinker ett sekund, vil fokuset fungere, og ja, det fungerer! Men denne metoden er åpenbart dårlig. Finnes det en måte å få samme effekt som nedenfor uten å bruke en setTimeout?
$("#modal-content").on('show', function(event){
window.setTimeout(function(){
$(event.currentTarget).find('input#photo_name').first().focus()
}, 0500);
});
Svar #1
Prøv dette
Her er den gamle DEMO:
REDIGER: (Her er en fungerende DEMO med Bootstrap 3 og jQuery 1.8.3)
$(document).ready(function() {
$('#modal-content').modal('show');
$('#modal-content').on('shown', function() {
$("#txtname").focus();
})
});
Starter Bootstrap 3 trenger å bruke shown.bs.modal-hendelsen:
$('#modal-content').on('shown.bs.modal', function() {
$("#txtname").focus();
})
Svar #2
Ville bare si at Bootstrap 3 håndterer dette litt annerledes. Hendelsesnavnet er "shown.bs.modal".
$('#themodal').on('shown.bs.modal', function () {
$("#txtname").focus();
});
eller sett fokus på det første synlige inndatafeltet slik:
.modal('show').on('shown.bs.modal', function ()
{
$('input:visible:first').focus();
})
http://getbootstrap.com/javascript/#modals
Svar #3
Jeg bruker dette i oppsettet mitt for å fange alle modaler og fokusere på det første inngangsfeltet
$('.modal').on('shown', function() {
$(this).find('input').focus();
});
