我正在创建一个针对 iOS 设备的网络数据库驱动的离线网络应用程序。我正在尝试使用 jQuery Mobile,但在创建各种表单时遇到了问题。
表单选项取自数据库查询,因此它们在加载后插入到页面中,因此不会发生“jQuery-Mobilification”。快速浏览一下源代码,在这个阶段似乎没有任何明显的方法可以调用它(当然这是一个 alpha 版本,我认为这将是一个相当普遍的请求,所以我希望它将会来)。我可以采取某种解决方法来做到这一点吗?我对单选按钮、复选框和选择列表特别感兴趣。
我正在创建一个针对 iOS 设备的网络数据库驱动的离线网络应用程序。我正在尝试使用 jQuery Mobile,但在创建各种表单时遇到了问题。
表单选项取自数据库查询,因此它们在加载后插入到页面中,因此不会发生“jQuery-Mobilification”。快速浏览一下源代码,在这个阶段似乎没有任何明显的方法可以调用它(当然这是一个 alpha 版本,我认为这将是一个相当普遍的请求,所以我希望它将会来)。我可以采取某种解决方法来做到这一点吗?我对单选按钮、复选框和选择列表特别感兴趣。
更新
Beta2 有一个create
事件。当 beta2 发布时,我会更新我的常见问题解答。见http://jquerymobile.com/blog/2011/07/22/jquery-mobile-team-update-week-of-july-18th/
更新常见问题解答:http: //jquerymobiledictionary.pl/faq.html
正如 CaffeineFueled 建议.page()
的那样 - 是让 JQM 与 HTML 的任何部分一起工作的方法
.page()
一个元素只能调用一次。在添加到页面的包装元素上调用它。它应该处理一切。
当前选择的答案稍有过时。使用“刷新”而不是“页面”来设置动态添加的内容(列表或表单)的样式。
如果将项目添加到列表视图,则需要对其调用 refresh() 方法来更新样式并创建添加的任何嵌套列表。例如,
$('ul').listview('refresh');
在您的 AJAX 调用完成并插入表单元素后,尝试调用:
$("#the-page-id").page();
我相信 jquery-mobile 团队将来会在各种 UI 元素上添加一个 .refresh() 方法来解决这个问题。
这在未记录的内部结构中很混乱,但以下内容对我有用:
$("#some-div").load("/html/fragment/",
function() {
$(this).find("input").customTextInput();
});
按钮、复选框等有等效的方法。
查看http://code.jquery.com/mobile/1.0a1/jquery.mobile-1.0a1.js_enchanceControls
中的[sic] 方法。
1.0Alpha2 更新:正如在使用库内部时可以预料的那样,这在最新版本中不再有效。更改customTextInput()
以textinput()
对其进行一些修复,但由于某种原因,该主题并未完全应用。我们被警告...
是的,问题和你描述的一样。当文件准备好时会触发“动员”。但是由于您的离线数据库查询是异步的,它会在 document.ready 被触发后结束。因此 DOM 会在该过程的后期进行更新,并且不会将额外的 CSS 添加到所有 div 和列表项中。
我认为您必须将移动 js 的源代码更改为不在文档就绪时运行,而是在您告诉它运行时运行。然后您必须在数据库回调中调用该函数。
看来这是目前唯一的选择。
传统上我使用 jqtouch,现在使用 sencha。我在 jQuery mobile 上玩的不多。
或者 - 您可以在使用必要的 CSS 样式从数据库中查询出来之后写出您的 HTML。如果您使用 Firefox 的 Firebug 插件,您可以看到在移动运行时应用了哪些样式/类。您可以使用这些约定写出您的 HTML。不理想,但会工作。
naugtur 是对的,您必须在添加到 dom 的任何元素上调用 .page() ,然后效果很好:
var el = $('<input type="text"/>')
el.page();
$('#something').append(el);
这对我有用(jquerymobile1.7.0):
$('#formular').append('<div data-role="fieldcontain" class="ui-hide-label">' +
'<label for="name" class="ui-hidden-accessible">Name:</label>' +
'<input type="text" name="name" size="25" id="name" placeholder="Name"/>' +
'</div>');
$('#name').textinput();
目前,所有类型的表单元素(例如滑块、文本输入等)都有所谓的插件函数来创建它们。
这是 Tom 谈到的有关此功能的文档的链接。不确定它们是何时添加的,但我正在使用它,它对我有用!
http://jquerymobile.com/test/docs/forms/plugin-eventsmethods.html