二、动态生成ListView问题
这个问题花了整整一天的时间才解决了。之前老是出现各种奇怪的错误,典型如:
Uncaught cannot call methods on listview prior to initialization; attempted to call method 'refresh'
我的listview的容器ul完全是动态生成的。动态HTML代码如下:
<div data-role="page" id="pLogin" data-hash="false">
<div data-role="header" data-theme="b" data-position="inline">
<h1>欢迎使用</h1>
</div>
<div data-role="content">
<div class="content-primary">
<ul data-role="listview" data-inset="true" id="lv1">
<li><a href="#">AAAAAAAAAAA<a></li>
<li><a href="#">BBBBBBBBBBB<a></li>
<li><a href="#">CCCCCCCCCCC<a></li>
<li><a href="#">DDDDDDDDDDD<a></li>
</ul>
</div>
</div>
</div>
调用
$("#lv").listview('refresh');时,出错了:Uncaught cannot call methods on listview prior to initialization; attempted to call method 'refresh'
查了N多资料,终于弄明白了。因为我的page容器也是动态生成的。page数据加载至容器时,jquerymobile并没有对该page容器进行初始化。因此调用 page的content下的listview组件的refresh方法时,会出现异常。
解决方法:
在dom数据加载完成后,重新生成page
$("#pLogin").page();
$("#lv").listview('refresh');
问题成功解决。
当a 标签已经动态生成后。怎么去调用a标签的click方法呢?
一定注意动态加载的数据标签只能加载范围内有效。必须将函数紧跟在动态加载元素后面范围内。不能跳出动态加载的函数。否则找不到相应标签。那么标签的事件将无效
$("#cd_list #add").on("vclick",function(){})
可以通过a标签的函数来解决跨函数的问题
query是页面一加载获取页面元素的,你后期加的a标签,是获取不到的。 你可以在$("#table").append("<a href='javascript:;' class='del'>删除</a>")的时候就在内部加上事件,如$("#table").append("<a href='javascript:;' class='del' οnclick='alert("获取到了")'>删除</a>")。 如果调用函数就提前定义好,直接调用就好了
更新2014 - 04-26
以上a标签动态生成后的事件方法比较笨。找到一种新的解决方案
jquery的on方法其实是集合了bind,live, delegate 在2.0版本都喜欢用on方法
但是动态生成的a标签绑定时候需要绑定到a标签的父元素。不然动态加载的标签不会生效。menu是页面元素, .add 是a标签。这样绑定后。动态生成的标签就不需要重复绑定了
$("#menu").on('click','.add',function(evt)
http://www.zfanw.com/blog/jquery-dynamic-insert-element-bind-event.html