我今天遇到了一个令人恼火的问题,同时试图专注于已经构建然后增强的输入字段(表单容器'$ selectedActionsContainer'被传递给'.enahnceWithin();')。
不起作用:
$selectedActionsContainer.enhanceWithin();
$userInputNewBoxes.focus();
使用:
$selectedActionsContainer.enhanceWithin();
setTimeout(function(){
$userInputNewBoxes.focus();
}, 50);
我已经查看了jQuery Mobile文档,并查看了遇到类似问题但找不到任何内容的任何人(很可能我错过了解释)。
有没有人知道造成这种情况的原因,以及是否有比'setTimeout()更好的解决方案(必须有一个......)?
答案 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;