2015-11-12 143 views
0

所以,我有以下的jQuery功能:重新渲染jQuery函数

 jQuery('.button').click(function(e) {    
      if(!isMobile) { 
       jQuery('.button').featherlight({       
       });           
      } 
     }) 

这在<body>像下面的底部创建一个收藏夹:

收藏夹打开前:

<body> 
    <button> Show lightbox</button> 
    <script src="https://...jquery.min.js"></script> 
    <script src="https://...custom_js.js"></script> 
</body> 

灯箱开启后:

<body> 
    <button> Show lightbox</button> 
    <script src="https://...jquery.min.js"></script> 
    <script src="https://...custom_js.js"></script> 
    <div class="lightbox">Lightbox content</div> 
</body> 

问题是,这个灯箱里面的jQuery函数都没有工作,因为它是在页面加载后创建的。

如何在灯箱创建后“重新渲染”js文件?

谢谢!

下面是一个例子:

jQuery('#tags').keyup(function(e){ 
    console.log(e);      
    if(e.which == 188) { 
     var tag = ...; 
     var data = '<button>tag</button>'; 
     tags.push(tag); 
     jQuery('.tags ul').append(data); 
     jQuery(this).val(''); 
       }    
     }); 

在此,标签输入将被“追加”或添加到一个div类=“标签”。然而在灯箱里面,这个功能根本不被执行。

+0

你不应该;目前还不清楚你在做什么,什么时候或如何做。 –

回答

1

重新渲染一个JS文件不是javascript应该如何工作。

我推荐你做的是运行afterContent回调函数。

正如你可以在featherlight文档中看到的,有很多回调可以帮助你做到这一点。

例子:

jQuery('.button').click(function(e) {    
     if(!isMobile) { 
      jQuery('.button').featherlight({ 

       afterContent: function() { 
        // Do your code here 
        // The lightbox content will be ready 
       } 

      });           
     } 
    }) 
+0

我看到它背后的逻辑。如果正在执行的功能来自大型图书馆,该怎么办?像谷歌的material.min.js? –

+0

我敢肯定,大型图书馆提供了一种“重新呈现”他们的代码,只要你需要的方式。除非它是来自<2005的大型图书馆。 像Facebook SDK一样。如果您需要解析脚本第一次运行后创建的XFBML标签,您可以在“材质库”的情况下使用'FB.XFBML.parse();'或'FB.XFBML.parse(specificDomElementToParse);' –

+0

。为了渲染在dom准备好之后创建的元素,您可以使用'componentHandler.upgradeDom();' –

0

这里的问题是,动态地添加轻的牛。

如果您需要任何触发器内部或收藏元素上工作,你将需要使用:

$(document).on('click', '.lightbox .button', function(){ 
    ... 
}); 

请注意,你不希望收藏这里面的代码,但你经常JS文件中。仅仅因为我们不喜欢内联js,其次你可以用上面的代码随时触发每个动态内容。

+0

如果正在执行的函数来自大型库,该怎么办?像谷歌的material.min.js? –