Jquery mobile JQM-仅在加载时注入动态内容

Jquery mobile JQM-仅在加载时注入动态内容,jquery-mobile,Jquery Mobile,我正在尝试使用自定义模板填充函数在加载时(最新jQM版本)动态填充select标记 如果在“pagebeforechange”事件中调用fn,则select标记将正确初始化。由于每次页面转换都会调用此事件,因此我考虑将fn移动到“pageinit”事件。这不起作用,可能是因为DOM尚未完全可用。如何强制jQM只在页面中注入一次内容?目前,我使用的是一个乱七八糟的方法。肯定有更聪明的方法。谢谢你的建议 $(document).bind('pageinit', function () {

我正在尝试使用自定义模板填充函数在加载时(最新jQM版本)动态填充select标记

如果在“pagebeforechange”事件中调用fn,则select标记将正确初始化。由于每次页面转换都会调用此事件,因此我考虑将fn移动到“pageinit”事件。这不起作用,可能是因为DOM尚未完全可用。如何强制jQM只在页面中注入一次内容?目前,我使用的是一个乱七八糟的方法。肯定有更聪明的方法。谢谢你的建议

  $(document).bind('pageinit', function () {
     InitSelTagTest("#selActTag", "tplTag"); // Does not work.
  });

  $(document).bind("pagebeforechange", function (e, data) {        
     if ($("#selActTag").children().size() === 0) {
        InitSelTagTest("#selActTag", "tplTag"); // Kludge, but it works
     }
  });

  function InitSelTagTest(el,tpl) { // Append all tags to element el      
     var lstAllTags = JSON.parse($("#hidTag").val()); // Create tag array

     // Retrieve html content from template.
     var cbeg = "//<![" + "CDATA[", cend = "//]" + "]>";
     var rslt = tmpl(tpl, { ddd: lstAllTags }).replace(cbeg, ").replace(cend,");            

     $(el).html(rslt).trigger("create"); // Add to DOM.
  }

我不确定我是否完全理解你的问题,但我会抛出一些东西,你让我知道,如果我可以进一步扩展

为了在页面加载时只触发一次,您可以尝试实现一个常规的JQuery
$(document).ready(function(){})
aka
$(function(){})
,这正是JQuery移动用户被告知不要使用它的原因。它只在DOM加载时触发一次。后续页面不会触发它,因为它们是通过Ajax切换的

除此之外,在常规的动态内容加载中,您可以查看我之前为其他人编写的以下示例:


我不确定我是否完全理解你的问题,但我想说几句话,你会告诉我是否可以进一步扩展

为了在页面加载时只触发一次,您可以尝试实现一个常规的JQuery
$(document).ready(function(){})
aka
$(function(){})
,这正是JQuery移动用户被告知不要使用它的原因。它只在DOM加载时触发一次。后续页面不会触发它,因为它们是通过Ajax切换的

除此之外,在常规的动态内容加载中,您可以查看我之前为其他人编写的以下示例:


可能不是你想要的,但是你可以设置一个标志。可能不是你想要的,但是你可以设置一个标志。谢谢。我尝试了这种方法:将动态内容添加到DOM中,但即使使用触发器(“create”)或page()方法,动态内容仍然是隐藏的。不确定,但似乎“pagebeforecreate”事件可能会在这里得到解决(请参阅我的原始帖子中的编辑)。如上所述,$(document).ready()插入动态内容,但html标记仍然隐藏。试图通过触发器(“刷新/创建”)、show()等呈现它们(使其可见),但没有效果。在我的例子中,“pagebeforecreate”似乎是解决方案。这就是我所指的,你的解决方案。如果它有效的话,继续把它作为一个解决方案发布在下面。我发布了一个关于如何为感兴趣的人注入动态内容的大纲。谢谢。我尝试了这种方法:将动态内容添加到DOM中,但即使使用触发器(“create”)或page()方法,动态内容仍然是隐藏的。不确定,但似乎“pagebeforecreate”事件可能会在这里得到解决(请参阅我的原始帖子中的编辑)。如上所述,$(document).ready()插入动态内容,但html标记仍然隐藏。试图通过触发器(“刷新/创建”)、show()等呈现它们(使其可见),但没有效果。在我的例子中,“pagebeforecreate”似乎是解决方案。这就是我所指的,你的解决方案。如果它有效的话,继续把它作为一个解决方案发布在下面。我发布了一个关于如何为感兴趣的人注入动态内容的概要。
$("#pgAct").live("pagebeforecreate", function () {
    // Populate tag select. Works. Traversed only once.      
    InitSelTag("#selActTag", "tplTag"); 
});