事先很抱歉,我不知道我遇到的问题的术语。
基本上这个硬编码版本按预期工作:

$("#navbar").on("click", "#contactLink", loadContact);

function loadContact () {
    $("#navbar ul li a").removeClass("selected");
    $("#contactLink").addClass("selected");
    $("#page").fadeOut(500, function(){
        $("#content").load("TGCContact.html .insert", function() {
            $("#page").fadeIn(1000);
        });
    });
    return false;
}

但以下版本暂停了 500 毫秒(包括“选定”链接更新),然后清空 #content 并直接跳转到fadeIn():
$("#navbar").on("click", "#contactLink", function(){
    loadContact('TGCContact.html .insert', '#contactLink');
});

function loadContact (htmlPage, newLink) {
    $("#navbar ul li a").removeClass("selected");
    $(newLink).addClass("selected");
    $("#page").fadeOut(500, function(){
        $("#content").load(htmlPage, function() {
            $("#page").fadeIn(1000);
        });
    });
    return false;
}

硬编码版本很好而且很流畅。有人可以解释为什么会发生这种情况以及如何解决吗?
谢谢

最佳答案

我在第二个版本中唯一看到的错误是您失去了 return false 旨在防止默认行为的效果(event.preventDefault() 通常更适合)。

因此,如果没有 HTML,人们可以假设那里有一个 URL,并且页面会做一些可能会导致不需要的效果的事情。

所以你可以这样返回被调用函数的结果

$("#navbar").on("click", "#contactLink", function(){
    return loadContact('TGCContact.html .insert', '#contactLink');
});

或者干脆在函数中丢失 return false 并在处理程序中执行
$("#navbar").on("click", "#contactLink", function(){
    loadContact('TGCContact.html .insert', '#contactLink');
    return false;
});
event.preventDefault 方式
$("#navbar").on("click", "#contactLink", function(event){
    loadContact('TGCContact.html .insert', '#contactLink');
    event.preventDefault();
});

关于jquery - 对于硬编码的参数,函数的行为有所不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25676571/

10-09 03:31