专注于通过jQuery Mobile'EnhanceWithin()'

时间:2018-01-22 14:16:20

标签: javascript jquery jquery-mobile

我今天遇到了一个令人恼火的问题,同时试图专注于已经构建然后增强的输入字段(表单容器'$ selectedActionsContainer'被传递给'.enahnceWithin();')。

不起作用:

$selectedActionsContainer.enhanceWithin();
$userInputNewBoxes.focus();

使用:

$selectedActionsContainer.enhanceWithin();
setTimeout(function(){
    $userInputNewBoxes.focus();
}, 50);

我已经查看了jQuery Mobile文档,并查看了遇到类似问题但找不到任何内容的任何人(很可能我错过了解释)。

有没有人知道造成这种情况的原因,以及是否有比'setTimeout()更好的解决方案(必须有一个......)?

1 个答案:

答案 0 :(得分:0)

.enhanceWithin()方法对所有新插入的元素起作用,所以我不会依赖或做出任何假设,关于容器内的内容,以及初始化所需的时间所有新的小部件实例。当然,浏览器需要一些时间来重排并附加新事件。

如果您需要替代解决方案,Ypu可以捕获JQM textinputcreate事件。这是一个例子:



function enhance() {
  var html = '';
  html += '<div class="ui-field-contain" data-mini="true">';
  html += '<label for="basic">Text Input:</label><input type="text" name="name" id="basic" value="">';
  html += '</div>';
  html += '<div class="ui-field-contain" data-mini="true">';
  html += '<label for="search-1">Search Input:</label><input name="search-1" id="search-1" value="" type="search">';
  html += '</div>';
  html += '<div class="ui-field-contain" data-mini="true">';
  html += '<label for="textarea-1">Textarea:</label><textarea cols="40" rows="8" name="textarea-1" id="textarea-1">Textarea</textarea>';
  html += '</div>';
  $(document).one("textinputcreate", "#basic", function(e) {
    this.focus();
  });
  $("#container").empty().append(html).enhanceWithin();
}
&#13;
<!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 src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.js"></script>
</head>
<body>
  <div id="page-1" data-role="page">
    <div role="main" class="ui-content">
      <a href="#" class="ui-btn ui-corner-all ui-mini" onclick="enhance(); return false">Enhance & Focus</a>
      <div id="container"></div>
    </div>
  </div>
</body>
</html>
&#13;
&#13;
&#13;