IT story

$ .focus ()가 작동하지 않습니다

hot-time 2020. 6. 20. 09:39
반응형

$ .focus ()가 작동하지 않습니다


jQuery focus()문서마지막 예제 상태

$('#id').focus()

입력에 초점을 맞 춥니 다 (활성화). 이 작업을 수행 할 수없는 것 같습니다.

이 사이트의 콘솔에서도 검색 창을 사용하려고합니다.

$('input[name="q"]').focus()

나는 아무것도 얻지 못했습니다. 어떤 아이디어?


실제로이 사이트에 중점을 둔 예제는 콘솔에 중점을 두지 않는 한 제대로 작동합니다. 작동하지 않는 이유는 개발자 콘솔에서 포커스를 훔치지 않기 때문입니다. 콘솔에서 다음 코드를 실행 한 다음 브라우저 창에서 빠르게 클릭하면 검색 상자에 초점이 맞춰집니다.

setTimeout(function() { $('input[name="q"]').focus() }, 3000);

다른 하나는 과거에 문제를 일으킨 것은 사건의 순서입니다. DOM에 첨부되지 않은 요소에 대해서는 focus ()를 호출 할 수 없습니다. 집중하려는 요소가 이미 DOM에 첨부되어 있습니까?


인터넷의 다른 곳에서 해결책을 찾았습니다 ...

$('#id').focus();

작동하지 않았다.

$('#id').get(0).focus();

일했다.


여기서 답변 중 일부는 setTimeout대상 요소에 초점을 맞추는 프로세스를 지연시키는 데 사용 하는 것이 좋습니다 . 그들 중 하나는 대상이 모달 대화 상자 안에 있다고 언급합니다. setTimeout사용 된 위치의 특정 세부 사항을 모르면 솔루션 의 정확성에 대해 더 이상 언급 할 수 없습니다 . 그러나 나는 내가했던 것처럼이 스레드에 빠진 사람들을 돕기 위해 여기에 답변을 제공해야한다고 생각했습니다.

문제의 간단한 사실은 아직 보이지 않는 요소에 집중할 수 없다는 것입니다 . 이 문제점이 발생 하면 초점을 맞추려고 할 때 대상이 실제로 표시되는지 확인하십시오 . 내 경우에는이 라인을 따라 뭔가를하고있었습니다.

$('#elementid').animate({left:0,duration:'slow'});
$('#elementid').focus();

이것은 작동하지 않았다. 나는 단지 내가 $를 실행시에 무슨 일이 있었는지 깨달았다 ( '# elementId로부터'). 초점 ()`콘솔에서 했던 일을. 타겟 위의 코드에서 차이는 애니메이션이 완료 되지 않았기 때문에 타겟이 실제로 보일지 확실하지 않습니다 . 그리고 단서가있다

$('#elementid').animate({left:0,duration:'slow',complete:focusFunction});

function focusFunction(){$('#elementid').focus();}

예상대로 작동합니다. 나도 처음에는 setTimeout솔루션을 넣었고 너무 효과가있었습니다. 그러나, 임의로 선택된 타임 아웃은 호스트 장치가 대상 요소가 보이는지 확인하는 프로세스가 얼마나 느리게 진행되는지에 따라 솔루션을 조만간 중단 할 수밖에 없습니다.


부트 스트랩 + 모달을 사용하면 이것이 효과가 있습니다.

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

다른 사람 이이 질문을 우연히 발견하고 같은 상황을 겪을 경우를 대비하여 다른 요소를 클릭 한 후 초점을 설정하려고했지만 초점이 작동하지 않는 것 같습니다. 방금 필요한 것이 밝혀졌습니다. e.preventDefault();여기에 예가 있습니다.

$('#recipients ul li').mousedown(function(e) {
    // add recipient to list
    ...
    // focus back onto the input
    $('#message_recipient_input').focus();
    // prevent the focus from leaving
    e.preventDefault();
});

이것은 도움이되었다 :

mousedown 이벤트 핸들러에서 HTMLElement.focus ()를 호출하는 경우 HTMLElement를 벗어나지 않도록 포커스를 유지하려면 event.preventDefault ()를 호출해야합니다. 출처 : https://developer.mozilla.org/en/docs/Web/API/HTMLElement/focus


나는 이것이 오래되었다는 것을 알고 있지만 오늘 그것을 보았습니다. 대답 중 어느 것도 나를 위해 효과가 없었으며, 내가 찾은 것은 setTimeout이었습니다. setTimeout이 작동하여 모달의 입력에 초점을 맞추기를 원했습니다. 도움이 되었기를 바랍니다!


나는 또한이 문제가 있었다. 필자의 경우 효과적 인 해결책은 HTML 요소에서 tabindex 속성을 사용하는 것이 었습니다.

ng-repeat목록 내의 일부 li 요소를 사용 하고 있었고 .focus ()를 사용하여 첫 번째 li에 초점을 맞출 수 없었으므로 루프 동안 각 li에 tabindex 속성을 추가했습니다.

그래서 지금 <li ng-repeat="user in users track by $index" tabindex="{{$index+1}}"></li>

That +1 was index starts from 0. Also make sure that the element is present in DOM before calling the .focus() function

I hope this helps.


Add a delay before focus(). 200 ms is enough

function focusAndCursor(selector){
  var input = $(selector);
  setTimeout(function() {
    // this focus on last character if input isn't empty
    tmp = input.val(); input.focus().val("").blur().focus().val(tmp);
  }, 200);
}

For those with the problem of not working because you used "$(element).show()". I solved it the next way:

 var textbox = $("#otherOption");
 textbox.show("fast", function () {
    textbox[0].focus();
  });

So you dont need a timer, it will execute after the show method is completed.


ADDITIONAL SOLUTION Had same issue where focus() didn't seem to work but eventually it turned out that what was needed was scrolling to the correct position:

참고URL : https://stackoverflow.com/questions/15859113/focus-not-working

반응형