1

我运行 FB bigPipe 的“剥离”版本,它运行完美,除了 jquery。当我以 json 格式解析 jquery 并附加到 div 标签时,jquery 停止工作。

你可以看到我在这里使用的“bigPipe”jquery 代码

使它工作的代码非常简单。在 PHP 中:

$data = array(
        'id' =>  {div tag ID},
        'content' => {html content},
        'title' => {document title},
        'css' =>  {...},
        'js' => {...}
        );

$output = '<script>Test.render(' . json_encode($data) . ');</script>';

我认为问题在于我必须将 window.addEventListener 添加到窗口本身,而不是添加到我附加内容的 div 标签。

在这里我被困住了。我该怎么做呢?如何让这个 jquery 在这个附加的 html 中工作?

这是一个关于它应该如何工作的例子:

如果您尝试从 php 文件运行此代码,则会出现问题。请执行以下操作:

  1. 将来自 jsFiddle 的 js 代码放入 js 文件中,并正常包含在 .php 文件中。在 php 文件中创建一个 div 标签并将其命名为“not_working”- 保存
  2. 制作一个空的 .html 文档并添加一个 div 标签<div id="test">Click me</div>并保存。
    1. 创建一个新的 js 文件并将其命名为 test.js。输入这段代码:

$(函数(){

$("body").on("click","#test",function(){
    alert("You clicked me!!");
});         

});

节省。

  1. 在 PHP 文件中,添加以下内容:$data = array( 'id' => "not_working", 'content' => {LINK and NAME to the HTML file you created!!}, 'title' => "Test", 'css' => "", 'js' => {LINK and NAME to the JS file you created!!}, );

  2. 运行 .php 文件,单击 Click me!。

4

1 回答 1

0

问题解决了。这是将js文件插入body元素的方式错误。修复该代码后。我解决了它,现在一切都很完美。

如果有人尝试使用此代码,则更改如下:

function _addJsFile(filename) {
  var blody = document.getElementsByTagName("body")[0],
  script = document.createElement('script'),
  done = false;

  script.src = filename;
  script.type='text/javascript';
  script.onload = function() {
      if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
        done = true;
        // Handle memory leak in IE
        script.onload = script.onreadystatechange = null;
        if (blody && script.parentNode) {
          blody.removeChild(script);
        }
     }
  };

  blody.appendChild(script);
}
于 2013-07-17T06:06:33.930 回答