Javascript 为什么告诉jQuery单击我的链接按钮会减慢我的页面速度?

Javascript 为什么告诉jQuery单击我的链接按钮会减慢我的页面速度?,javascript,c#,jquery,asp.net,updatepanel,Javascript,C#,Jquery,Asp.net,Updatepanel,或者什么,但我基本上有一个下拉列表,允许用户选择一个项目作为过滤器。选中该项时,它应仅将一个项带回网格视图。也就是说,这个特定的过滤器最多会带回您正在查找的记录。如果用户单击“应用”链接应用过滤器,则此操作正常。应用链接后面是ASP.NET Web窗体应用程序中的一些服务器端代码C 我们收到一个用户的请求,内容如下: $(document).ready(function() { //Some initial event/triggers var prm = Sys.Web

或者什么,但我基本上有一个下拉列表,允许用户选择一个项目作为过滤器。选中该项时,它应仅将一个项带回网格视图。也就是说,这个特定的过滤器最多会带回您正在查找的记录。如果用户单击“应用”链接应用过滤器,则此操作正常。应用链接后面是ASP.NET Web窗体应用程序中的一些服务器端代码C

我们收到一个用户的请求,内容如下:

$(document).ready(function() {

     //Some initial event/triggers

     var prm = Sys.WebForms.PageRequestManager.getInstance();
     prm.add_endRequest(function () {
         //Copy of some initial event/triggers
     });
});
如果我在此处进行选择,为什么必须单击“应用”按钮 一个下拉过滤器…它应该只得到一个记录我 寻找。这对我很有帮助,因为我不必单击 应用按钮

我同意他的观点,并认为最简单的方法是什么……我想:很简单,我将在下拉列表中有一个on change事件处理程序,这样当做出选择时,我将触发一个click事件。大意如下:

        $("#MainContent_ddlCompany").on("change", function() {
            var companyId = $("#MainContent_ddlCompany").val();
            $("#MainContent_hdnCompanyValue").val(companyId);
            $("#<%=ddlCompany.ClientID %>").trigger("chosen:updated");

            if (companyId.length > 0) {
                $(".apply").click();
                $(".apply").removeClass("applyButton");
                $(".apply").addClass("resetButton");
            } else {
                //cleared selection of a company
                $(".apply").removeClass("resetButton");
                $(".apply").addClass("applyButton");
            }
        });
为此:

$('.apply')[0].click();
这很有效…所以我决定再测试一下。当我不断选择一个又一个过滤器值时,我注意到页面开始变慢。事实上,到了第六次或第七次时,它已经无法使用了。我不知道为什么会发生这种情况,但我再次怀疑这与这个带有类名.apply的linkbutton位于更新面板内的事实有关

但我仍然在想,在我更改jQuery代码以模拟单击事件之前,它在一个更新面板中。那么,为什么页面会因为这段代码而变慢和拖拽呢?从jQuery代码中调用事件是否会导致HTML中的其他内容

如果我重新更改代码,并强制用户单击应用按钮,那么我们将恢复到良好的正常速度。为什么我要让jQuery模拟单击按钮来降低页面速度?它也在做同样的事情,模拟点击这个链接按钮是调用它的服务器端代码方法,不管用户点击它还是我让jQuery点击它

现在我不知道为什么会发生这种情况,因为无论哪种情况下,此按钮都在更新面板中,但当我使用jQuery时,请通过$单击它。应用'[0]。单击;几次尝试后,页面速度减慢。但是,当我让用户在没有jQuery click事件的情况下简单地单击这个按钮时,它就可以正常工作了吗


我在这里遗漏了什么?

呃,我发现了我的问题。因为我使用的是updatepanels,所以我必须包装jQuery代码以包含一个add_endRequest。也就是说,你有一些效果:

$(document).ready(function() {

     //Some initial event/triggers

     var prm = Sys.WebForms.PageRequestManager.getInstance();
     prm.add_endRequest(function () {
         //Copy of some initial event/triggers
     });
});
为什么我要使用您询问的endRequest?因为updatepanels基本上会在异步回发后丢弃所有事件,因为更新后的HTML会再次呈现,而此时与更新面板内任何控件相关的所有事件都会被擦除。当然,此时document.ready没有运行,所以我必须在endRequest中重新订阅这些事件。输入我的问题

我有一个巨大的大脑放屁,我基本上把文档中的所有东西都准备好并复制到endRequest中。事实上,如果我没记错的话,我读过这样的文章

文档中的所有内容都已准备就绪,只需将粘贴复制到endRequest中即可

那很好,但是你在这里必须小心。我将未包装在updatepanel中的事件放入endRequest。结果是灾难性的…至少对我来说

这些事件将被附加多次..或基于异步回发的数量。在我的例子中,正如我在测试中提到的,在第6次或第7次性能开始下降之后。好吧,到那时我的控件已经被多次附加到事件上了。例如,我的.apply按钮和我的dropdownlist都在我的updatepanel之外。但是我的jQuery代码在DocumentReady和endRequest中都附加了dropdownlist的更改事件

结果是最初它非常快,因为它只在文档中准备好了。但当我进行异步回发时,每次都会附加这些事件。对于n个测试,我将有n个附加事件…在我的情况下,7个测试将生成7个关于更改事件处理程序的测试


例如,对于不在更新面板中的任何控件,不要放置任何事件处理程序,例如jQuery的on事件。否则,当事件发生时,您将遇到我遇到的性能不佳的问题。

请尝试触发器:$。应用“[0]。触发器“单击”。@HenriS。-那有什么关系呢?@亨利正在更改为您提到的$。应用“[0]。触发“单击”;现在什么都不做,没有事件没有数据未捕获类型错误:$…[0]。触发器不是一个函数…我的问题不是它没有回调我需要的数据。我的问题是页面的速度发生了什么变化。请查看您的资源,例如firebug。也许,这个过程没有停止??使用类apply对所有元素执行所有操作。那是
效率不高。最好使用id作为唯一元素。我明白你的意思。我想知道更新面板是否以某种方式导致dom上存在多个apply按钮实例,但不可见。因此,单击单个按钮会手动触发单个事件,而调用整个类进行单击可能会导致在.apply的许多实例上触发单击。值得检查$的长度。我想应用。希望是1。直觉说这是一个事件堆栈泄漏。这是一个棘手的问题。