0

我有一个内置在 jqtouch 中的 iphone web 应用程序,当内容由链接(“a”标签)加载时,jqtouch 会解析下一页上的任何内容并初始化任何链接。但是,当我通过 AJAX 调用加载内容并将append()其加载到元素时,jqtouch 不会初始化该内容中的任何链接。因此,对这些链接的任何点击都是对新资源的全面点击,并且不由 jqtouch 处理,因此此时您已经有效地脱离了 jqtouch。

我的 AJAX 代码是:

#data
<script type="text/javascript">
      $.ajax({
        url: '/mobile/nearby-accounts',
        type: 'GET',
        dataType: 'html',
        data: {lat: lat, lng: lng},
        success: function(html) {
          $('#data').empty().append(html);
          // Is there some method I call on jqtouch to have any links in $('#data') be hooked up to the jqtouch lifecycle?
        }
</script>

提前致谢。

4

3 回答 3

0

执行以下操作对我来说效果更好,并且不需要修改源:

jQT.goTo('#slide', 'slide');

其中 #slide 是要滑动到的面板的 ID。

于 2010-08-11T04:16:56.113 回答
0

我能够通过做两件事来实现这一点:

1)通过修改jqtouch.js并将liveTap添加到返回的方法列表中(在jqtouch.js的末尾),将以前的私有方法“liveTap”导出为public:

publicObj {getOrientation:getOrientation,goBack:goBack,goTo:goTo,
 addAnimation:addAnimation,submitForm:submitForm, liveTap:liveTap};
return publicObj;

2)在我的包装容器上调用 liveTap 处理程序,该容器具有我想“连接”到 jqTouch 的链接:

      $('#data a').click(function(e) {
        e.preventDefault();
        jqTouch.liveTap(e);            
      });
于 2010-06-02T04:34:15.390 回答
0

虽然@Cody 的解决方案可行,但您最好在原始页面中添加容器 div,然后您可以异步填充并为其设置动画。例如:在 main.html 添加:

... <div id="future"></div> ...

然后,在附加脚本中,添加:

$('selector').append('<a href='#future">link</a>').find('a').click(function(e) {
  e.preventDefault();
  loadDataAndShow($(this).<read some context here>);
});

函数 loadDataAndShow() {
   // 使用像 $.getJSON 之类的 ajax 或者其他的在这里加载数据

   // 然后用数据填充 $('#future')

   jQT.goTo('#future', 'slide');
}

然后从脚本中附加一个链接然后加载 jQTouch 容器的问题是你必须公开隐藏的方法,即使那样它也不是 100%。此外,如果您正在做建议,您可以分解 append 方法,首先在没有“.click”的循环中进行追加,然后使用单个 jQuery 命令添加点击侦听器。您可以/应该将属性添加到以加载上面提到的上下文。

@emtrane:问题是关于 ajax 加载 jQuery 块,该块本身会在链接中加载其他内容。

于 2011-03-24T02:21:22.427 回答