0

我已经定义了一个表单域的焦点事件来打开一个带有选项的 Jquery UI 对话框。我希望焦点应该保持在同一字段上,以实现不间断的数据输入。我的要求就像 datepicker 所示,用户看到 datepicker 覆盖但焦点停留在日期字段上,以便用户可以继续输入日期。

这是相关字段和对话框的代码。

$( "#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();
    }        
  });

这是带有表格的对话框 Div。我正在使用 jquery 数据表插件填充此表。

<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>
4

1 回答 1

0

您必须在 open 回调上再次将焦点设置到您的控件:

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/

我希望这可以帮助

于 2013-01-11T19:17:39.257 回答