专注于通过 jQuery Mobile 'enhanceWithin()' 呈现的字段

Focusing on a field rendered via jQuery Mobile 'enhanceWithin()'

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

无效:

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

作品:

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

我查看了 jQuery 移动文档,并四处寻找遇到类似问题但找不到任何东西的人(很可能我错过了解释)。

有谁知道是什么原因造成的,是否有比 'setTimeout()' 更好的解决方案(必须有一个...)?

.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();
}
<!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>