我下面有一个jQuery对话框。我正在使用jQuery UI 1.11。
$("#contactContainer").dialog({
closeOnEscape: false,
modal: true,
dialogClass: 'contactsFooter',
open: function(event, ui) {
$(".ui-dialog-titlebar-close").show();
$('#dialog_footer').remove();
$(".contactsFooter").append('<div class="" id="dialog_footer"><div class="dialog-footer-buttons"><button type="button" id ="close" class="button-style-2" onclick="$(\'#hasChangedForm\').val(\'\');" style="margin-left: 5px;">Cancel</button></div></div>');
},
autoOpen: false,
width: 300,
minHeight: 'auto',
maxHeight: 400,
position: { my: 'top', at: 'top+50' },
close:function() {
$('#contactContainer').dialog("option", "position", { my:"top", at:"top+50", of: window });
$('#contactContainer').html('');
}
});
$("#contactContainer").dialog('open');
这里是Fiddle示例。在这个示例中:
点击任何一个文本框(表示聚焦)。在此示例中,我们聚焦的文本框有“test here”。
现在通过单击对话框的滚动条并向下/向上拖动来滚动对话框,看看会发生什么。它会失去我们所点击的文本框的聚焦。如果我按Tab键,它会再次将焦点设置为第一个字段。这很奇怪。
如果我使用鼠标滚轮,则焦点仍然在相同的字段上。这是正常的。
坦率地说,我不知道为什么会发生这种情况。有人能帮我解决如何防止滚动时对话框失去焦点吗?我希望焦点仍保留在同一个字段上。
tabindex
有什么问题?你能解释一下吗? - Linga$(".ui-dialog")
的填充区域上,所以当你点击滚动条时,就相当于点击容器,这会导致你失去焦点。移除 tabindez 使元素无法聚焦,因此当你点击它时,不会失去输入焦点。然后,在某些地方我记不清楚了,JQuery UI 有一个适当的处理程序来以正确的方式重新添加可聚焦属性。 - Iván Rodríguez Torrestabindex
上,但在我的情况下,我不能删除它,因为默认的浏览器导航操作(空格键和shift+空格键)只有在我们添加了tabindex
后才能在弹出窗口上工作。如果我们在对话框中删除tabindex
,当您按下shift+空格键时,它将仅滚动背景屏幕而不是对话框。 - Linga