표시된 후 부트 스트랩 모달의 첫 번째 텍스트 입력에 초점을 설정하는 방법


116

동적 부트 스트랩 모달을로드하고 텍스트 입력이 거의 없습니다. 커서가이 모달의 첫 번째 입력에 초점을 맞추고 싶은 문제는 기본적으로 발생하지 않습니다.
그래서이 코드를 작성했습니다.

$('#modalContainer').on('show', function () {
   $('input:text:visible:first').focus();
});

그러나 이제는 잠시 입력에 초점을 맞춘 다음 자동으로 사라집니다. 왜 이런 일이 발생하고 어떻게 해결합니까?


2
jsfiddle.net 에서 데모를 제공 할 수 있습니까 ?
undefined

시간 제한을 설정해보십시오. 다른 것이 방해가 될 수 있습니다. setTimeout(function() { /* Your code */ }, 100);
qwerty

나를 위해 이것을 시도해 볼 수 있습니까? var index = 0; $ ( '# modalContainer'). on ( 'show', function () {index = 1;}); if (index) {$ ( 'input : text : visible : first'). focus (); }
chirag ghiyad 2013 년

답변:


187

@scumah가 해답을드립니다 : Twitter 부트 스트랩-클릭시 모달 내부의 텍스트 영역에 집중

부트 스트랩 2의 경우

modal.$el.on('shown', function () {
$('input:text:visible:first', this).focus();
});  

업데이트 : 부트 스트랩 3 용

$('#myModal').on('shown.bs.modal', function () {
    $('#textareaID').focus();
})  

========== 업데이트 ======

질문에 대한 응답으로 다른 데이터 대상을 지정하고 양식 입력 필드의 ID와 일치하도록 모달 ID의 이름을 바꾸고 업데이트 한 다음 마지막으로 이러한 새 항목과 일치하도록 JS를 업데이트하는 경우 동일한 페이지에서 여러 모달과 함께이를 사용할 수 있습니다. ID : http://jsfiddle.net/panchroma/owtqhpzr/5/
참조

HTML

...
<button ... data-target="#myModal1"> ... </button> 
... 
<!-- Modal 1 -->
<div class="modal fade" id="myModal1" ...>
... 

<div class="modal-body"> <textarea id="textareaID1" ...></textarea></div>

JS

$('#myModal1').on('shown.bs.modal', function() {
  $('#textareaID1').focus();
})

페이지에 하나의 모달이있는 경우에만 작동합니까? 둘 이상이면 어떨까요?
Ramesh Pareek

훌륭하고 빠른 응답! 어리석은 오류를 범했습니다. 지금 작동합니다!
Ramesh Pareek 2016

+1 거의 한 시간이 지난 후 귀하의 답변을 읽었을 때 내 코드를 "show"에서 "shown"으로 변경했습니다.
Exel Gamboa

이것은 jquery 유효성 검사가 실행될 때 최대 호출 스택 오류를 제공합니다!. 따라서 이것은 나에게 소용이 없습니다.
Vandita

@Vandita, 설명하는 문제를 설명하는 codepen.io에서 펜을 시작하려면 기꺼이 살펴 보겠습니다.
David Taiaroa 2019

80

jQuery없이이 작업을 수행하는 가장 좋은 방법을 찾았습니다.

<input value="" autofocus>

완벽하게 작동합니다.

이것은 html5 속성입니다. 모든 주요 브라우저에서 지원됩니다.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input


이 작업을 수행하는 데 몇 시간을 소비 한 후 (클릭 또는 처리기에서) html5 자동 초점 속성 인 작동하는 한 가지 방법 만 찾았습니다.<input type="text" class="form-control" placeholder="" autofocus>
lots0logs

1
MVC3 컨트롤에서 수행하는 방법은 다음과 같습니다. @Html.TextBoxFor(m => m.UserName, new { @autofocus="" })
Flea

19
그것은 입력을 모달 부트 스트랩 보여주는 후 ... 나를 위해 일하지가 포커스를 잃었을
디에고 Cotini에게

자동 초점을 사용할 때 부트 스트랩 모달이 나타난 후 잠시 동안 입력 게인 초점이 보입니다. 그러나 입력은 초점을 잃습니다. .on () 핸들러를 구현해야했습니다.
raddevus

7
tabdindex="-1"모달에서 제거하면 작동 하지만 한 번만 작동합니다. 닫고 다시 열면 초점이 맞지 않습니다.
Memet Olsen 2017 년

42

David Taiaroa의 대답은 맞지만 모달을 "페이드 인"하는 시간이 입력에 초점을 맞출 수 없기 때문에 작동하지 않습니다. 지연을 만들어야합니다.

$('#myModal').on('shown.bs.modal', function () {
    ...
    setTimeout(function (){
        $('#textareaID').focus();
    }, 1000);

})

2
당신은 바로 여기에 있습니다. 귀하의 솔루션이 작동하는 유일한 솔루션입니다. timeOut에 더 작은 값을 설정하려고했지만 작동하지 않았습니다. 1000ms에 모달 "로드 완료"가 보입니다. :(
Enrique

1
네, 그러나 오늘, 나의 새로운 프로젝트에, 내가 사용하는 <input value="" autofocus>이상한, 나를 위해이 시간을 잘 근무
마르코스 Furquim

3
올바른 방법은 shown.bs.modal 이벤트를 사용하는 것입니다 : getbootstrap.com/javascript/#modals-events
Akhorus

2
setTimeout ()을 사용하는 대신 다음과 같이 delay ()를 사용할 수 있습니다 ... $ ( '# textareaID'). delay (1000) .focus (). select ();
Tony

확실히 수정 솔루션입니다.
Frank Thomas

18

일반적인 코드 (아래) 작동 하지 않습니다 .

$('#myModal').on('shown.bs.modal', function () {
  $('#myInput').focus()
})

해결책을 찾았습니다 .

$('body').on('shown.bs.modal', '#myModal', function () {
    $('input:visible:enabled:first', this).focus();
})

여기에서 더보기


9

그 부트 스트랩이 페이지에 다음 정보를 추가했습니다.

HTML5가 의미를 정의하는 방식으로 인해 autofocus HTML 속성은 Bootstrap 모달에 영향을 미치지 않습니다. 동일한 효과를 얻으려면 일부 사용자 정의 JavaScript를 사용하십시오.

$('#myModal').on('shown.bs.modal', function () {
  $('#myInput').focus()
})

http://getbootstrap.com/javascript/#modals


7

이것은 초점을 맞춘 입력 필드가있는 모든 팝업에서 가장 잘 작동하는 간단한 코드입니다.

$(".modal").on('shown.bs.modal', function () {
    $(this).find("input:visible:first").focus();
});

4

jQuery를 사용한다고 가정 할 때 가장 정답은이 페이지에있는 모든 답변의 측면과 부트 스트랩이 통과하는 이벤트를 사용하는 것입니다.

$(document).on('shown.bs.modal', function(e) {
  $('input:visible:enabled:first', e.target).focus();
});

또한 변화 일 것 $(document)$('.modal')처럼, 또는 신호가이 초점이 발생해야한다는 것을 모달에 클래스를 추가하는$('.modal.focus-on-first-input')


2
이것은 내가 여기에서 본 것 중 최고이고 가장 일반적인 솔루션입니다. :)
Martin T.

읽기 전용 텍스트 상자도 무시하려면 줄을 다음과 같이 수정하십시오. $ ( 'input : visible : enabled : not ([readonly]) : first', e.target) .focus ();
Douglas Timms

3

이 코드를 시도해보십시오.

$(this).find('input:text')[0].focus();

1
내가 사용하는 것은 다음과 같습니다.$(this).find('input:text').first().focus()
Jimmy

1

첫 번째 단계 autofocus는 양식 입력에 속성 을 설정해야 합니다.

<input name="full_name" autofocus/>

그런 다음 모달이 표시된 후 입력의 자동 초점을 설정하기 위해 선언을 추가해야합니다.
이 코드를 시도하십시오.

$(document).on('ready', function(){
    // Set modal form input to autofocus when autofocus attribute is set
    $('.modal').on('shown.bs.modal', function () {
        $(this).find($.attr('autofocus')).focus();
    });
});

나는 $ (this) .find ( '[autofocus]'). focus (); 그리고 그것은 작동합니다
SummerRain

0

열려있는 모달에 자동으로 초점을 맞추려면 첫 번째 입력에 초점을 맞추는이 스 니펫을 패턴 또는 lib 함수에 넣을 수 있습니다.

$('.modal').on('shown.bs.modal', function () {
  $(this).find('input:first').focus();
})

0

모든 모달에서 작동하는 스 니펫을 찾고 열린 텍스트에서 첫 번째 입력 텍스트를 자동으로 검색하는 경우 다음을 사용해야합니다.

$('.modal').on('shown.bs.modal', function () {
    $(this).find( 'input:visible:first').focus();
});

모달이 ajax를 사용하여로드 된 경우 대신 다음을 사용하십시오.

$(document).on('shown.bs.modal', '.modal', function() {
    $(this).find('input:visible:first').focus();
});

0

이것은 가장 일반적인 해결책입니다

$('body').on('shown.bs.modal', '.modal', function () {
    $(this).find(":input:not(:button):visible:enabled:not([readonly]):first").focus();
});
  • 페이지로드 후 DOM에 추가 된 모달과 함께 작동
  • 버튼이 아닌 입력, 텍스트 영역, 선택과 함께 작동합니다.
  • ommits 숨김, 비활성화, 읽기 전용
  • 페이드 된 모달과 함께 작동하며 setInterval이 필요하지 않습니다.

0

입력 / 텍스트 상자가 열려있을 때 modal의 tabIndex 속성제거하십시오 . 입력 / 텍스트 상자를 닫을 때 이전 상태로 다시 설정하십시오 . 이 문제를 해결하는 것입니다 관계없이 부트 스트랩 버전을 , 그리고 사용자 경험의 흐름을 손상시키지 않고 .


0

Bootstrap 4 문서에 따르면 :

HTML5가 의미를 정의하는 방식으로 인해 autofocus HTML 속성은 Bootstrap 모달에 영향을 미치지 않습니다. 동일한 효과를 얻으려면 일부 사용자 정의 JavaScript를 사용하십시오.

예 :

$('#idOfMyModal').on('shown.bs.modal', function () {
    $('input:first').trigger('focus')
});

링크 .


0

자동 초점을 사용하여 올바른 양식 요소를 검색하십시오.

$('.modal').on('shown.bs.modal', function() {
  $(this).find('[autofocus]').focus();
});

-1
$(document).ready(function() {
  $("#button").click(function() {
    $('#mymodal').on('shown.bs.modal', function() {
      $('#myinput').focus();
    })
  });
});
  • 모달 형식을 호출하는 "#button"입니다.

  • "#mymodal"은 모달 형식입니다.

  • "#myinput"은 초점을 맞출 입력입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.