jQuery Mobile – 动态创建表单元素

我正在创建一个针对iOS设备的网络数据库驱动的离线网络应用程序。 我正在尝试使用jQuery Mobile,但是我在创建各种表单时遇到了问题。

表单选项取自数据库查询,因此它们在加载后插入到页面中,因此“jQuery-Mobilification”不会发生。 快速查看源代码,在这个阶段似乎没有任何明显的方法可以调用它(当然它是alpha版本,我认为这将是一个相当普遍的请求,所以我希望它将会来)。 有什么办法可以解决这个问题吗? 我对单选按钮,复选框和选择列表特别感兴趣。

这是在无证内幕中搞乱,但以下内容对我有用:

$("#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()会稍微修复一下,但由于某种原因主题未完全应用。 我们被警告了……

UPDATE

Beta2有一个create活动。 当beta2发布时我会更新我的常见问题。 请参阅http://jquerymobile.com/blog/2011/07/22/jquery-mobile-team-update-week-of-july-18th/

更新了faq: http : //jquerymobiledictionary.pl/faq.html


正如CaffeineFueled所提出的那样 – .page()是使JQM与HTML的任何部分一起工作的方法

.page()只能为一个元素调用一次。 在添加到页面的包装元素上调用它。 它应该处理一切。

当前选择的答案略有过时。 使用“刷新”而非“页面”来设置动态添加内容(列表或表单)的样式。

如果将项添加到列表视图,则需要在其上调用refresh()方法来更新样式并创建添加的任何嵌套列表。 例如, $('ul').listview('refresh');

通过jQuery Mobile文档,1.0.4a

在您的AJAX调用完成并插入表单元素后,尝试调用:

 $("#the-page-id").page(); 

我相信jquery-mobile团队将在各种UI元素上添加.refresh()方法,以便将来解决这个问题。

是的,问题就像你描述的那样。 文档准备就绪时会触发“动员”。 但由于您的脱机数据库查询是异步的,因此会在触发document.ready之后结束。 因此,DOM会在稍后的过程中更新,并且没有将额外的CSS添加到所有div和列表项中。

我认为您必须将移动设备的源更改为不在文档就绪上运行,而是在您告诉它运行时运行。 然后你必须在数据库回调中调用该函数。

看起来这是目前唯一的选择。

传统上我使用jqtouch和现在的sencha。 我没有玩过jQuery mobile。

另外 – 您可以在使用必要的CSS样式从数据库中查询HTML后写出HTML。 如果您使用Firefox的Firebug插件,您可以看到在动员运行时应用了哪些样式/类。 您可以使用这些约定来编写HTML。 不理想,但会奏效。

naugtur是对的,你必须在你添加到dom的任何元素上调用.page(),然后它可以很好地解决:

 var el = $('') el.page(); $('#something').append(el); 

这对我有用(jquerymobile1.7.0):

 $('#formular').append('
' + '' + '' + '
'); $('#name').textinput();

目前所谓的插件函数用于所有类型的表单元素(例如,滑块,文本输入等)来创建它们。

这是Tom谈到的这个function的文档链接。 不确定它们何时添加,但我正在使用它,它对我有用!

http://jquerymobile.com/test/docs/forms/plugin-eventsmethods.html