我已经定义了一个表单字段的焦点事件来打开一个Jquery UI对话框,其中包含要选择的选项。我希望焦点应该保持在同一个字段中,以便不间断地输入数据。我的要求就像datepicker所示,用户看到datepicker overlay,但焦点仍然在日期字段上,以便用户可以继续输入日期。
以下是相关字段和对话框的代码。
$( "#pmt_code" ).focus(function(){
$( "#pmtcodes" ).dialog( "open" );
// Keep focus stayed on this field somehow
});
$( "#pmtcodes" ).dialog({
autoOpen: false,
position: { my: "left top", at: "left bottom", of: $("#pmt_code") },
closeOnEscape: true,
open: function(){
listPmtCodes();
}
});
这是Dialog Div with table。我使用jquery datatable插件填充此表。
<div id="pmtcodes" title="payment Codes">
<table cellpadding="0" cellspacing="0" border="0" class="display" id="pmtCodesTable">
<thead>
<tr>
<th>Code</th>
<th>Description</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
答案 0 :(得分:0)
您必须在打开的回调中再次将焦点设置为您的控件:
var $pmt_code = $("#pmt_code"),
$pmtcodes = $("#pmtcodes");
$pmt_code.focus(function(){
!$pmtcodes.dialog( "isOpen" ) && $pmtcodes.dialog( "open" );
});
$pmtcodes.dialog({
autoOpen: false,
position: {
my: "left top",
at: "left bottom",
of: $pmt_code
},
closeOnEscape: true,
open: function(){
listPmtCodes();
setTimeout(function () { // Workaround for Internet Explorer
$pmt_code.focus(); //<---- Keep focus stayed on this field somehow
}, 10);
}
});
我只是稍微更改了代码,以避免在每个元素上搜索DOM多一次。
您还需要实现keyup事件以捕获按下的ESC以关闭对话框:
$pmt_code.keyup(function (e) {
if (e.keyCode == 27 && $pmtcodes.dialog("isOpen")) // ESC pressed
{
$pmtcodes.dialog("close");
}
});
点击此处查看一个:http://jsfiddle.net/9KuVA/
我希望这可以帮助