JavaScript函数破坏了我在jQuery地址抓取中的深层链接

时间:2011-02-19 12:26:45

标签: javascript jquery jquery-address

使用jQuery Address(插件)的JavaScript的奇怪行为。

我有这段代码:

var handler = function(data) {
$('#conteudo').hide().html($('#conteudo', data).html()).fadeIn(500);
$.address.title(/>([^<]*)<\/title/.exec(data)[1]);
};

它有效。完美。

现在我改变了代码:

var handler = function(data) {
$('#conteudo').fadeOut(500, function() {
    $('#conteudo').html($('#conteudo', data).html()).fadeIn(500);
});
$.address.title(/>([^<]*)<\/title/.exec(data)[1]);
};

现在淡出效果有效,淡入后(新内容)。美丽!但是编写新内容的方式(在fadeOut之后的新函数内部)的这一小变化打破了我页面内的子链接。

这是一个实例:

  1. 访问此网址:http://impulse.im/clean/2/
  2. 在顶部菜单中,点击“Contato”。
  3. 现在在加载的内容中查看链接'Rafa'的hrefhttp://impulse.im/clean/2?_escaped_fragment_=%2Fcontato%2Frafa
    这是不正确的:它应该读作
    http://impulse.im/clean/2/#!/contato/rafa
  4. 再次:http://impulse.im/clean/2/ - 点击“转移”。现在RELOAD页面。
  5. 链接'Rafa'现在正确无误。
  6. 这个新函数(在fadeOut之后)对代码做了什么?为什么这个功能会破坏我的链接?

    谢谢!

1 个答案:

答案 0 :(得分:1)

问题在于,在将数据中存储的html实际放置在页面上之前,您正在调用地址插件。之所以发生这种情况,是因为您调用$('#conteudo').html($('#conteudo', data).html()).fadeIn(500)异步调用fadeOut方法作为回调函数。

以这种方式改变:

var handler = function(data) {
    $('#conteudo').fadeOut(500, function() {
        $('#conteudo').html($('#conteudo', data).html()).fadeIn(500);
        $.address.title(/>([^<]*)<\/title/.exec(data)[1]);
    });
};

这会在新内容放入页面后调用您的地址插件。

之前它就像这样。

处理程序返回数据 - &gt;内容淡出 - &gt;你打电话给地址插件,但内容还没有放在页面上 - &gt;在500ms之后,您将调用添加内容的回调。

现在它会是这样的。

处理程序返回数据 - &gt;内容淡出 - &gt;在500ms之后添加内容并调用地址插件