Jquery 如果之前未加载页面,请单击“加载页面”

Jquery 如果之前未加载页面,请单击“加载页面”,jquery,pageload,Jquery,Pageload,如果页面已经加载,请告诉我如何在单击后停止加载页面 $(".Tab_heading:first-child").live('click',function(){ $.ajax({ type: 'get', url: "relatedInfo.action", data: $(".relatedinfo_wrapper"), success: relatedInfodesktop });

如果页面已经加载,请告诉我如何在单击后停止加载页面

$(".Tab_heading:first-child").live('click',function(){
$.ajax({
            type: 'get',
            url: "relatedInfo.action",
            data: $(".relatedinfo_wrapper"),
            success: relatedInfodesktop
        });

$(".Tab_heading").removeClass("tabselected");
$(this).addClass("tabselected");
$(".RelService_wrapper").show();
$(".DepService_wrapper").hide();

});
Tab\u heading用作Tab有两个Tab链接类=Tab\u heading 如果用户单击标题,页面将被加载 但是,如果用户单击标题,并且页面已经加载,则不应再次加载。http:xxxxxxx/relatedInfo.action-i不应获取此信息
请提供解决方案

请尝试此代码,以便在加载页面之前检查变量

var loaded = false;

$(".Tab_heading:first-child").live('click',function(){
if(!loaded){
$.ajax({
        type: 'get',
        url: "relatedInfo.action",
        data: $(".relatedinfo_wrapper"),
        success: relatedInfodesktop
    });

$(".Tab_heading").removeClass("tabselected");
$(this).addClass("tabselected");
$(".RelService_wrapper").show();
$(".DepService_wrapper").hide();
});
}
}
function relatedInfodesktop(response){
//your code here
loaded = true;
}

也许您只是在运行AJAX之前添加一些检查。例如,正如我从代码中看到的,您删除并添加了一些类。所以,若已经加载了ajax响应,那个么页面中将有不同的样式。所以试试这样吧

$(".Tab_heading:first-child").live('click',function(){
if ($(this).hasClass("tabselected")){ do nothing}
else{$.ajax({you get the rest})}
}

加载后禁用事件;在用户单击之前等待禁用事件可能不是最佳解决方案。JQuery提供了.load函数;只需选择将包含ajax加载内容的元素,然后调用

$('#my_loading_element').load(function() {$(".Tab_heading:first-child").off('click')});
在上面。这将在加载元素后删除单击事件。或者,如果元素始终通过ajax加载,则可以将以下内容:

$(".Tab_heading:first-child").off('click');
在您的成功功能中,您可以退出该事件

在我看来,如果数据甚至在用户单击某个东西之前就开始加载,那么您可能根本不应该进行ajax调用,而只是从服务器端将内容放入其中;但是,如果您必须进行ajax调用,并且必须在单击时触发它,您还可以使用第三个选项,在第一次单击时解除事件,以便所有后续的单击都不起任何作用。例如,当用户单击并触发ajax一次,然后在完成之前再次单击,然后一次又一次。。。错误代码会多次放入内容。您的代码看起来更像这样:

$(".Tab_heading:first-child").live('click',function(){
    $(this).off('click');
    $.ajax({
    ...
    });
});
这可能是你最好的选择;在单击时触发ajax调用一次,但不再触发

编辑

最后一次调用.click是为了方便,因此用户无需单击选项卡两次即可打开它


最后一件事:如果您使用的jquery不是1.7或更高版本,那么出于许多原因,您应该进行更新。较新的版本更易于使用、更直观、更高效、更不笨拙,并且可能具有对严肃的web开发人员至关重要的安全功能。即使转换一个站点需要花费很长时间,这也是值得的。

除非您使用的是旧的1.7之前版本的jQuery,否则您应该使用它,而不是不推荐使用的版本。live Function没有问题。建议您使用最新的API,因为将从jQuery中删除.live以支持.on..on,因此jQuery iam usingI concur不支持.on..on,因此值得投入精力更新到jQuery的最新版本。它会让你的生活变得更简单,更有效率。例如,用Twitter的引导选项卡替换jQueryUI选项卡功能可能需要一些时间和精力,但最终的结果是值得付出一切努力的。我刚刚在一个老项目上完成了这项工作,虽然这是一个令人头痛的问题,但该项目更适合它,甚至运行和加载速度更快;但是,不进行检查,只需删除事件即可防止代码再次运行。这样,如果再次单击,则不会进行任何检查,甚至不会进行一次。如果我这样做,则单击此选项卡时,选项卡内容也不会打开。这可能是因为您有多个事件在单击时触发;如果只有这两个事件,即打开选项卡和单击时触发的加载选项卡,则可能需要将打开选项卡的代码放在加载选项卡的代码中。查看我的编辑。单击时的唯一事件是tab open n从提供的操作加载内容,因此如果我尝试。关闭,则用户无法单击,选项卡将不会打开,因为我使用jquery 1.4。打开将不起作用:再次查看我的编辑。您不希望在加载内容之前打开选项卡,因此您要做的是加载它,然后再次添加click事件,以便可以打开选项卡,并使用jQuery触发click事件。很抱歉,当你阅读文章时,我的编辑没有完成;就在最后…也不会了。走开。您必须为您的版本找到等效的功能,但方法仍然是一样的。
$(".Tab_heading:first-child").live('click',function(){
    $(this).off('click');
    $.ajax({
    ...
        success: function() {
            $(".Tab_heading:first-child").on('click', function() {
                //open the tab here
            }).click();
        } //no trailing comma for IE compatibility
    });
});