사용자가 링크를 클릭하면 표시되도록 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>
에서 문서 , 초점 로직 (제목 ‘포커스’에서, 단지 목차에서) 설명 :
대화 상자를 열면 포커스가 다음과 일치하는 첫 번째 항목으로 자동 이동됩니다.
autofocus
속성이 있는 대화 상자의 첫 번째 요소:tabbable
대화 상자 내용 의 첫 번째 요소:tabbable
대화 상자의 버튼 창에 있는 첫 번째 요소- 대화 상자의 닫기 버튼
- 대화 자체
답변
그 위에 숨겨진 범위를 추가하고 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
속성 / tabbable
element / 를 사용하여 첫 번째 요소에 포커스를 설정 하거나 대화 상자 자체로 되돌아갑니다. 사용은 요소에 초점을 맞추는 것이므로 요소로 대체하는 데 아무런 문제가 없습니다 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");
}
});
});