簡體   English   中英

jQuery GET加載頁面后在頁面中調用Javascript

[英]Calling Javascript in a page after it's been loaded by jQuery GET

想象一個正常的頁面在頭部調用javscript。 問題是某些內容直到我單擊鏈接后才加載。 隨后,當此鏈接加載內容時,它將無法工作。 這是因為我猜Javascript已經運行,因此不會將自己附加到稍后調用的那些元素上。 只有標准的html被調用。

因此,例如,這是調用我的外部html的代碼。

$.get('content.inc.php', {id:id}, function(data){
        $('#feature').children().fadeTo('fast', 0).parent().slideUp('slow', function(){
           $(this).html(data).slideDown('slow');
        });
    });

例如,如果我正在調用html且H1標簽已經在頁面中,cufon將可以工作。 但是,由於我通過上述方法加載內容,因此H1標簽不會更改為我選擇的字體。這只是一個示例。 同樣適用於任何JavaScript。

我很想知道是否有一種方法可以解決以上功能收到的同時不調用javascript和html的問題

如果要將事件附加到動態創建的頁面元素上,請查看“實時”關鍵字。

$('H1').live("click", function() { alert('it works!'); });

希望這就是您想要的。

Cufon.refresh()做什么嗎?

如您所說, Cufon 只是一個示例 ,我還建議您使用更籠統的內容:

$.get(url, options, function(html, status) {
    var dom = $(html);
    // call your function to manipulate the new elements and attach
    // event handlers etc:
    enhance(dom);

    // insert DOM into page and animate:
    dom.hide();
    $target_element.append(dom); // <-- append/prepend/replace whatever.
    dom.show(); // <-- replace with custom animation
});

您可以將事件處理程序附加到通過回調函數內部的get()獲得的數據上。 例如

$.get('content.inc.php', {id:id}, function(data){
    $('#feature').children().fadeTo('fast', 0).parent().slideUp('slow', function(){        
        $(this).html(data).find('a').click(function(e) {
            // specify an event handler for <a> elements in returned data
        }).end().slideDown('slow');
    });
});

live()也可能是您的選擇,具體取決於您要綁定到的事件(由於live()使用事件委托,因此不支持所有事件 )。

安迪嘗試一下。 在每個AJAX請求完成之后且html實際添加到頁面之前,它將調用Cufon代碼。

$.get('content.inc.php', {id:id}, function(data){
    $('#feature').children().fadeTo('fast', 0).parent().slideUp('slow', function(){
        $(this).html(data);
        Cufon.replace('h1');
        $(this).slideDown('slow');
    });
});

由於安全原因而未執行JavaScript,或者因為jQuery只是將該元素的innerHTML設置為某些文本(不包含在JavScript中),如果包含了該文本。 因此,安全性是另外一個影響。

怎么解決呢?

嘗試在您的響應中查找所有SCRIPT標簽,並將其作為休假執行:

var scripts = myelement.getElementsByTagName("SCRIPT");
var i = 0;

for (i = 0; i < scripts.length; i++)
   eval(scripts[i].innerHTML);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM