当前位置: 首页 > 知识库问答 >
问题:

关注具有焦点事件的字段

澹台庆
2023-03-14

我定义了一个表单字段的焦点事件,以打开一个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 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>

共有1个答案

董弘新
2023-03-14

必须在打开的回调中将焦点再次设置为控件

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

在此查看一个live:http://jsfidle.net/9kuva/

希望这能有所帮助

 类似资料:
  • 焦点事件会在页面元素获得或失去焦点时触发。利用这些事件并与document.hasFocus()方法及 document.activeElement 属性配合,可以知晓用户在页面上的行踪。有以下6 个焦点事件。 blur:在元素失去焦点时触发。这个事件不会冒泡;所有浏览器都支持它。 DOMFocusIn:在元素获得焦点时触发。这个事件与HTML 事件focus 等价,但它冒泡。只有Opera 支持

  • 我正在尝试跟踪全局关键事件,特别是按下的箭头键。为此,我将一个处理程序附加到当前活动的场景: 然而,虽然大多数键都像字母、ctrl和tab键总是被检测到,空格键和箭头键只在没有元素有焦点的情况下才起作用。也就是说,当我单击窗口中的任何位置时,某些元素获得焦点,而按空格或箭头不再触发事件。通过CSS样式,我发现一旦场景被点击,总是有一个焦点元素存在,在这种情况下上面的键停止工作。 我的猜测是,聚焦节

  • 我努力理解如何使用事件源设计一个支持同步请求的事件驱动后端。据我所知,要利用事件源,您必须开发系统来响应事件,以便在必要时可以重播它们来重新创建您的状态。为此,这意味着我们正在尝试解耦事件触发器和事件处理程序。 如果我们假设一个客户端发送一个请求来更新一些数据,那么我们如何在使用事件驱动系统时适应这个同步请求/响应模型?您认为以下步骤是以事件驱动方式处理请求的正确方法吗? > 在API网关接收网络

  • 我正在尝试在我的组合框上绑定一个失焦事件,但它没有发生。 这是我的密码-: 我还试着这样做: JComboBox默认编辑器有一个内部类BasicComboBoxEditor$Borderless TextField,它是获取和丢失焦点的组件。 它可以通过以下方式访问: 但我在这条线上遇到了错误- 我是网豆新手,请提前指导me.Thank。

  • 问题内容: 我期待的是类似WebElement.isfocus()的东西,…确实很简单,但是我发现的唯一方法是使用 伪类。 这真的是不常见的任务,例如找不到大量信息吗? 我知道这个SO主题,但是距那时已经快两年了。最新版本中没有新内容吗? 您知道一些解决方法吗? 问题答案: 还有另一个主题涉及这个问题:使用SeleniumWebdriver测试元素是否为焦点 基本上,代码将是

  • 我有一个映射的输入字段列表: 我目前使用来处理提交: 我试图关注当前输入字段成功提交后的下一个输入字段。React留档有一个示例,用于使用