Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从.load()加载时,.getScript()不工作_Javascript_Jquery_Load - Fatal编程技术网

Javascript 从.load()加载时,.getScript()不工作

Javascript 从.load()加载时,.getScript()不工作,javascript,jquery,load,Javascript,Jquery,Load,您可以通过访问以下网站了解其工作方式: 即使用标准加载加载所有内容 您可以尝试在此处动态加载它: 然后单击“部件”链接。。。正如你所见,我没有任何警觉 我觉得这与检测何时启动getscript的能力有关,因为ondomready在动态加载时不会重新加载 以下是将加载内容的主脚本: $('#sub-navigation li a').click(function(){ var toLoad = $(this).attr('href')+' #content-container >

您可以通过访问以下网站了解其工作方式:

即使用标准加载加载所有内容

您可以尝试在此处动态加载它:
然后单击“部件”链接。。。正如你所见,我没有任何警觉

我觉得这与检测何时启动getscript的能力有关,因为ondomready在动态加载时不会重新加载


以下是将加载内容的主脚本:

$('#sub-navigation li a').click(function(){
    var toLoad = $(this).attr('href')+' #content-container > *';
    $('#content-container').hide('fast',loadContent);


    var href = $(this).attr('href');
    if (href == ".") {
        window.location.hash = ""; 
    } else {
        window.location.hash = href; 
    }

    // first remove the selected class from the active one
    $('#sub-navigation li.selected').removeClass('selected');
    // then find the parent li of the clicked element and add the selected class
    $(this).parents('li').addClass('selected');

    //$('#load').remove();
    //$('#wrapper').append('<span id="load">LOADING...</span>');
    //$('#load').fadeIn('normal');


    function loadContent() {
        $('#content-container').load(toLoad,'',showNewContent())
    }
    function showNewContent() {
        $('#content-container').show('normal',hideLoader());
    }
    function hideLoader() {
        //$('#load').fadeOut('normal');
    }
    return false;

});



编辑:12/18/2010-

我现在必须根据加载的“部件”页面动态加载不同的脚本。当然,我可以继续使用以前的解决方法,但我正在为此寻找更好的解决方案。我增加了一笔赏金来帮助你。


更新的解决方案:
通过使用get()模拟加载函数,我可以做我想做的事情:

这或多或少是杰森告诉我的;所以我给他赏金


更新的解决方案2:
find()命令将从1.4+开始删除所有脚本标记,因此我不得不这样做:

$.get(href, function(response){
    var contents = $(response).find('#content-container > *');
    $(response).filter('script[src=""]').each(function(){
            contents.push(this);
    });
    $("#content-container").html(contents);
});

我仍然希望避免这种复杂的混乱局面,但这似乎是我必须面对的问题。

下面是$.load中执行jQuery 1.4.2中插入的相关代码位(起始行4820):

//请求远程文档
jQuery.ajax({
url:url,
类型:类型,
数据类型:“html”,
数据:params,
完成:功能(恢复、状态){
//如果成功,将HTML注入到所有匹配的元素中
如果(状态==“成功”| |状态==“未修改”){
//查看是否指定了选择器
html(选择器?
//创建一个虚拟div来保存结果
jQuery(“”)
//在中插入文档内容,删除脚本
//避免IE中出现任何“权限被拒绝”错误
.append(res.responseText.replace(rscript,“”)
//找到指定的元素
.查找(选择器):
//如果没有,只需注入完整的结果
res.responseText);
}
如果(回调){
self.each(回调[res.responseText,status,res]);
}
}
});
如您所见,如果在要加载的内容中指定了选择器(您就是),jQuery将在将其插入页面之前从HTML中删除所有内联脚本块

为什么??动态创建DOM文档片段在不同浏览器之间根本不一致,并且没有真正的方法来控制脚本何时、如何执行,甚至是否执行

一个例子是:是否应该在创建片段时发生(就像jQuery在对其运行选择器之前发生的那样)?在这种情况下,运行脚本时,新内容实际上不会成为父文档的一部分

你怎么能解决这个问题?当然,您始终可以重新创建$.load()在内部执行的操作(基本上只需发出一个GET请求,从响应中创建一个jQuery对象,然后在追加/注入之前对其调用
.find(selector)
)。但是,要小心。这可能是不可靠的,我不知道不同的浏览器对此会有什么反应


我记得不久前读过一篇关于这一点的长篇讨论——我现在找不到它,但当我找到它时,我会在这里添加一个链接。

我可以通过使用get()模拟加载函数来实现我的目的:


这或多或少是杰森告诉我的;因此,我给了他赏金。

是“在此处插入更多HTML”部分中的
#部分吗?是的。。我将包括HTML的其余部分。实际上,我仍然需要一个解决方案,显然这在1.3.2中可以很好地工作,但不是1.4+更多的研究:似乎.find()方法去除了脚本标记。
                <h1>Parts</h1>
            <table id=parts class=tablesorter style="width: 500px;">
                <thead>
                <tr>
                    <th>Part #</th>
                    <th>Part Description</th>
                    <th>Price</th>
                    <th>Additional<br>Shipping</th>
                </tr>
                </thead>
                <tbody>
                <tr>
                    <td>AM01</td>
                    <td>ECONOMY OARS (EACH)</td>
                    <td>$30.00</td>
                    <td>$3.00</td>
                </tr>
                <tr>
                    <td>AM02</td>
                    <td>DELUXE OARS (EACH)</td>
                    <td>$42.00</td>
                    <td>$3.00</td>
                </tr>
                <tr>
                    <td>AM03</td>
                    <td>OAR LOCKS (PAIR)</td>
                    <td>$10.00</td>
                    <td>$2.00</td>
                </tr>
                <tr>
                    <td>AM04</td>
                    <td>LAKER BOW CASTING</td>
                    <td>$25.00</td>
                    <td>$3.00</td>
                </tr>
                <tr>
                    <td>AM05</td>
                    <td>PRO BOW CASTING</td>
                    <td>$25.00</td>
                    <td>$3.00</td>
                </tr>
                <tr>
                    <td>AM06</td>
                    <td>OAR LOCK CASTING W/INSERT</td>
                    <td>$28.00</td>
                    <td>$3.00</td>
                </tr>
                <tr>
                    <td>AM07</td>
                    <td>REAR CORNER CASTING RIGHT</td>
                    <td>$25.00</td>
                    <td>$3.00</td>
                </tr>
                <tr>
                    <td>AM08</td>
                    <td>REAR CORNER CASTING LEFT</td>
                    <td>$25.00</td>
                    <td>$3.00</td>
                </tr>
                <tr>
                    <td>AM09</td>
                    <td>FISHERMAN BOW SET (3 PC.)</td>
                    <td>$25.00</td>
                    <td>$3.00</td>
                </tr>
                <tr>
                    <td>AM10</td>
                    <td>OAR LOCK INSERTS (EACH)</td>
                    <td>$4.00</td>
                    <td>$2.00</td>
                </tr>
                <tr>
                    <td>AM11</td>
                    <td>DRAIN PLUG (5/8 MODIFIED)</td>
                    <td>$5.00</td>
                    <td>$2.00</td>
                </tr>
                <tr>
                    <td>AC06</td>
                    <td>LIFT VEST TYPE III</td>
                    <td>$25.00</td>
                    <td>$2.00</td>
                </tr>
                <tr>
                    <td>AC07</td>
                    <td>1" DRIAN PLUG</td>
                    <td>$5.00</td>
                    <td>$2.00</td>
                </tr>
                <tr>
                    <td>AC09</td>
                    <td>5/8" DRAIN PLUG</td>
                    <td>$5.00</td>
                    <td>$2.00</td>
                </tr>
                <tr>
                    <td>AM11</td>
                    <td>TOUCH UP PAINT</td>
                    <td>$15.00</td>
                    <td>$2.00</td>
                </tr>
                <tr>
                    <td>AM69</td>
                    <td>CONSOLE (SUPER PRO 16)</td>
                    <td>$135.00</td>
                    <td>Please call</td>
                </tr>
                <tr>
                    <td>AM70</td>
                    <td>CONSOLE W/STEERING (SUPER PRO 16)</td>
                    <td>$430.00</td>
                    <td>Please call</td>
                </tr>
                </tbody>
            </table>
    function showNewContent() {
        $('#content-container').show('normal',hideLoader);

        if (href == "parts") {
            $.getScript("/files/tablesorter/jquery.tablesorter.min.js", function() {
                $("#parts").tablesorter();
            });
        }
    }
$.get(href, function(response){
    var contents = $(response).find('#content-container > *');
    $("#content-container").html(contents);
});
$.get(href, function(response){
    var contents = $(response).find('#content-container > *');
    $(response).filter('script[src=""]').each(function(){
            contents.push(this);
    });
    $("#content-container").html(contents);
});
// Request the remote document
jQuery.ajax({
url: url,
type: type,
dataType: "html",
data: params,
complete: function( res, status ) {
    // If successful, inject the HTML into all the matched elements
    if ( status === "success" || status === "notmodified" ) {
        // See if a selector was specified
        self.html( selector ?
            // Create a dummy div to hold the results
            jQuery("<div />")
                // inject the contents of the document in, removing the scripts
                // to avoid any 'Permission Denied' errors in IE
                .append(res.responseText.replace(rscript, ""))

                // Locate the specified elements
                .find(selector) :

            // If not, just inject the full result
            res.responseText );
    }

    if ( callback ) {
        self.each( callback, [res.responseText, status, res] );
        }
    }
});
$.get(href, function(response){
    var contents = $(response).find('#content-container > *');
    $("#content-container").html(contents);
});