0

我想在 ajax 响应后将加载脚本替换为现有脚本。

由于我只会更新一些元素,因此不会重新加载整个页面,并且替换元素上的一些事件将丢失。

在 ajax 加载的内容上重新运行应用程序 Javascript <--- 这对我来说不是一个解决方案......

我尝试从加载的 html 和eval()它们中获取脚本标签。但是,这不会取代现有的功能,而是将它们加倍。

我想通过不使用来替换或重新执行脚本功能$(document).html(data);

我阅读了许多参考资料,例如 http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml

不过我不是很懂。。。。。。

请帮助和建议一个更容易理解的例子。非常感谢!

我现在的脚本是

  $script.each(function(index){ //data from loaded page, same page
    if(!$(this).attr('src')){    //replace where is not from external only

          $(document.getElementsByTagName( 'script' )).slice(index).remove(); 
          //remove existing script, no working

         eval($(this).text()); 
         // re-execute, wokring
     }; 
 }); 
4

1 回答 1

1

您可以尝试将您的逻辑与函数结合起来,并在需要时调用它。此外,如果您通过 ajax 加载的内容将包含 JS 函数,您可以在将检索到的 html 放置到页面后调用它。

当我需要将事件绑定到一些动态加载的组件时,我实现如下功能:

function rebindDynamic() {
  $('#elem1')
    .unbind()  //Or unbind('click') if you want to unbind specific handlers
    .click(function (e) { ... });

  $('#elem2')
    .unbind()  //Or unbind('keyup') if you want to unbind specific handlers
    .keyup(function (e) { ... });

  ...................
}

我希望它会有所帮助。

于 2013-01-11T08:00:31.710 回答