使用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之后的新函数内部)的这一小变化打破了我页面内的子链接。
这是一个实例:
href
!
http://impulse.im/clean/2?_escaped_fragment_=%2Fcontato%2Frafa
。http://impulse.im/clean/2/#!/contato/rafa
这个新函数(在fadeOut
之后)对代码做了什么?为什么这个功能会破坏我的链接?
谢谢!
答案 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之后添加内容并调用地址插件