Jquery Mobile - 单击弹出窗口(标题和内容的任何区域)自动聚焦文本字段

Posted

技术标签:

【中文标题】Jquery Mobile - 单击弹出窗口(标题和内容的任何区域)自动聚焦文本字段【英文标题】:Jquery Mobile - click on popup(any region of header and content) automatically focus textfield 【发布时间】:2017-10-23 07:57:16 【问题描述】:

点击弹出窗口的任何部分,除了文本字段上的按钮触发焦点和键盘出现。我希望文本字段在单击时获得焦点。有没有办法解决这个问题?

<div id="datasetPopup" data-role="popup" data-history="false" class="popupDialog" data-theme="b" data-dismissible='false'>
    <div data-role="header" data-theme="b" class="popupHeader">
        <h1><strong id="popupHeader"></strong></h1>
    </div>
    <div data-role="content" class="popupContent">
        <input type="text" id="searchText"/>
        <ul data-role="listview">
        /* lists */
        </ul>
    </div>
    <div class="footerFullButton">
        <button type="button" id="cancelButton">Cancel</button>
    </div>
</div>

【问题讨论】:

$('#searchText').click(function() $(this).focus(); ); 文本字段在被点击时会获得焦点,但在弹出窗口的任何区域(标题和内容)也被点击时也会获得焦点——这是问题和我关心的问题。 【参考方案1】:

这是设计使然,但您可以采用“技巧”在弹出窗口之外添加另一个输入元素,然后焦点转到整个弹出窗口,看起来也不是那么糟糕:

.ui-popup 
  padding: 1em;
  min-width: 200px;


.hidden 
  position:absolute;
  top:-100px;
  width:1px;
  height:1px;
  overflow:hidden;
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
  <link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.css">
  <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
  <script type="text/javascript">
    $(document).on('mobileinit', function() 
      $.mobile.ignoreContentEnabled = true;
    );
  </script>
  <script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
  <div data-role="page" id="page-one">
    <div data-role="header" data-position="fixed">
      <h3>Page</h3>
    </div>
    <div data-role="content">
      <a href="#popup" data-rel="popup" class="ui-btn">Popup</a>
    </div>
    <div data-role="footer" data-position="fixed">
      <h3>Footer</h3>
    </div>
    <div id="popup" data-role="popup" data-history="false" data-dismissible='false'>
      <input data-enhanced="true" type="button" class="hidden">
        <input type="text" id="usr" name="usr" value="">
        <a href="#" class="ui-btn" data-rel="back">Cancel</a>
    </div>
  </div>
</body>
</html>

您还应该告诉 JQM不要在弹出窗口内重新定位这个被替换的元素。这就是初始化行使用$.mobile.ignoreContentEnabled = true;的原因。

【讨论】:

以上是关于Jquery Mobile - 单击弹出窗口(标题和内容的任何区域)自动聚焦文本字段的主要内容,如果未能解决你的问题,请参考以下文章

当我在 jQuery Mobile 中单击弹出窗口上的链接时,如何防止在第一个输入项上自动对焦

弹出窗口打开时如何传播 jQuery Mobile 事件?

如何从第一个弹出窗口中打开第二个 jquery-mobile 弹出窗口

影响页面布局的 jQuery Mobile 弹出窗口?

单击jquery mobile中的输入字段时弹出触发器?

jQuery Mobile 中的弹出窗口没有按预期工作,请咨询