[javascript] jQuery UI 대화 상자가 첫 번째 텍스트 상자에 초점을 설정하지 못하게하십시오.

사용자가 링크를 클릭하면 표시되도록 jQuery UI 모달 대화 상자를 설정했습니다. 해당 대화 상자 div 태그에는 두 개의 텍스트 상자 (간결하게 1 코드 만 표시)가 있으며 포커스에 반응하는 jQuery UI DatePicker 텍스트 상자로 변경되었습니다.

문제는 jQuery UI 대화 상자 ( ‘open’)가 어떻게 든 첫 번째 텍스트 상자에 포커스를 두도록 트리거 한 다음 날짜 선택 달력이 즉시 열립니다.

그래서 초점이 자동으로 발생하지 않도록하는 방법을 찾고 있습니다.

<div><a id="lnkAddReservation" href="#">Add reservation</a></div>

<div id="divNewReservation" style="display:none" title="Add reservation">
    <table>
        <tr>
            <th><asp:Label AssociatedControlID="txtStartDate" runat="server" Text="Start date" /></th>
            <td>
                <asp:TextBox ID="txtStartDate" runat="server" CssClass="datepicker" />
            </td>
        </tr>
    </table>

    <div>
        <asp:Button ID="btnAddReservation" runat="server" OnClick="btnAddReservation_Click" Text="Add reservation" />
    </div>
</div>

<script type="text/javascript">
    $(document).ready(function() {
        var dlg = $('#divNewReservation');
        $('.datepicker').datepicker({ duration: '' });
        dlg.dialog({ autoOpen:false, modal: true, width:400 });
        $('#lnkAddReservation').click(function() { dlg.dialog('open'); return false; });
        dlg.parent().appendTo(jQuery("form:first"));
    });
</script>



답변

1.10.0 jQuery를 UI 변경 로그 나열 티켓 4731 고정되어있다.

focusSelector가 구현되지 않은 것처럼 보이지만 대신 다양한 요소에 대한 계단식 검색이 사용되었습니다. 티켓에서 :

[오토 포커스]로 시작한 다음 : 태 블러 블 컨텐츠, 버튼 창, 닫기 버튼, 대화 상자로 자동 초점 확장

따라서 요소를 autofocus속성으로 표시 하면 초점을 가져야하는 요소입니다.

<input autofocus>

에서 문서 , 초점 로직 (제목 ‘포커스’에서, 단지 목차에서) 설명 :

대화 상자를 열면 포커스가 다음과 일치하는 첫 번째 항목으로 자동 이동됩니다.

  1. autofocus속성이 있는 대화 상자의 첫 번째 요소
  2. :tabbable대화 상자 내용 의 첫 번째 요소
  3. :tabbable대화 상자의 버튼 창에 있는 첫 번째 요소
  4. 대화 상자의 닫기 버튼
  5. 대화 자체

답변

그 위에 숨겨진 범위를 추가하고 ui-helper-hidden-accessible을 사용하여 절대 위치로 숨기십시오. jquery-ui의 대화 상자를 사용하고 있으며 jquery-ui에 있기 때문에 클래스가 있다는 것을 알고 있습니다.

<span class="ui-helper-hidden-accessible"><input type="text"/></span>


답변

jQuery UI> = 1.10.2에서 _focusTabbable프로토 타입 메소드를 위약 함수로 바꿀 수 있습니다 .

$.ui.dialog.prototype._focusTabbable = $.noop;

깡깡이

이것은 모두에 영향을 미칩니다 dialog 각 페이지를 수동으로 편집 할 필요없이 페이지의 .

원래 함수는 autofocus속성 / tabbableelement / 를 사용하여 첫 번째 요소에 포커스를 설정 하거나 대화 상자 자체로 되돌아갑니다. 사용은 요소에 초점을 맞추는 것이므로 요소로 대체하는 데 아무런 문제가 없습니다 noop.


답변

jQuery UI 1.10.0부터 HTML5 속성 autofocus를 사용하여 집중할 입력 요소를 선택할 수 있습니다 .

대화 상자에서 첫 번째 입력으로 더미 요소를 작성하기 만하면됩니다. 그것은 당신을 위해 초점을 흡수합니다.

<input type="hidden" autofocus="autofocus" />

2013 년 2 월 7 일 Chrome, Firefox 및 Internet Explorer (모든 최신 버전)에서 테스트되었습니다.

http://jqueryui.com/upgrade-guide/1.10/#added-ability-to-specify-which-element-to-focus-on-open


답변

다음 코드에서 jQuery UI 대화 상자 기능을 찾았습니다.

c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();

jQuery 동작을 해결하거나 동작을 변경할 수 있습니다.

tabindex -1은 해결 방법으로 작동합니다.


답변

놀면서 이것을 알아 냈습니다.

초점을 제거하기 위해 이러한 솔루션을 찾았습니다. ESC 처음 대화 상자에 들어갈 때 키 작동이 중지되었습니다 (예 : 대화 상자 닫기).

대화 상자가 열리고 즉시 ESC 활성화되지 않은 경우 대화 상자가 닫히지 않습니다. 포커스가 숨겨진 필드 또는 다른 항목에 있고 키 누르기 이벤트가 발생하지 않기 때문입니다.

내가 고 쳤던 방법은 이것을 오픈 이벤트에 추가하여 첫 번째 필드에서 포커스를 제거하는 것이 었습니다.

$('#myDialog').dialog({
    open: function(event,ui) {
        $(this).parent().focus();
    }
});

이 대화 상자에 포커스를 설정하면 표시되지 않으며 ESC키가 작동합니다.


답변

입력의 tabindex를 -1로 설정 한 다음 나중에 필요한 경우 tabindex를 복원하도록 dialog.open을 설정하십시오.

$(function() {
    $( "#dialog-message" ).dialog({
        modal: true,
        width: 500,
        autoOpen: false,
        resizable: false,
        open: function()
        {
            $( "#datepicker1" ).attr("tabindex","1");
            $( "#datepicker2" ).attr("tabindex","2");
        }
    });
});