0

想象一个普通页面在头部调用 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

4

5 回答 5

3

如果您想将事件附加到页面上动态创建的元素,请查看“live”关键字。

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

希望这就是你要找的。

于 2009-11-09T23:27:25.807 回答
1

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
});
于 2009-11-10T08:27:24.763 回答
0

您可以将事件处理程序附加到通过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()使用事件委托,并非所有事件都受支持)。

于 2009-11-09T23:31:34.013 回答
0

安迪试试这个。它会在每个 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');
    });
});
于 2009-11-10T00:40:04.297 回答
0

由于安全原因或因为 jQuery 只是将此元素的 innerHTML 设置为某些文本(不被解释为 JavScript)(如果包含),因此不执行 JavaScript。所以安全是副作用。

如何解决?

尝试在您的回复中找到所有 SCRIPT 标签并将它们作为休闲方式执行:

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

for (i = 0; i < scripts.length; i++)
   eval(scripts[i].innerHTML);
于 2011-03-10T15:50:57.327 回答