【问题标题】:jQuery - function is being called three timesjQuery - 函数被调用三次
【发布时间】:2016-03-21 16:11:43
【问题描述】:

我正在尝试从 javascript 调用“AcceptSuggestion”。我模拟单击“acceptBtn”,然后我想刷新表格行。它正在工作......但是“AcceptSuggestion”函数被调用了三次。有谁知道为什么?我已经尝试在单击之前取消绑定“acceptBtn”,但我没有运气。

这里是更新面板:

<asp:UpdatePanel ID="12" UpdateMode="Conditional" runat="server">
<ContentTemplate>

<div id="123">
<asp:Literal ID="litTable" runat="server"></asp:Literal>
</div>
<button id='acceptBtn' onserverclick="AcceptSuggestion" runat="server" style="display: none" />
<button id='acceptAllBtn' onserverclick="AcceptAllSuggestions" runat="server" style="display: none" />
<asp:HiddenField ID="1" runat="server" Value="" />
<asp:HiddenField ID="2" runat="server" Value="" />
<asp:HiddenField ID="3" runat="server" Value="" />
<asp:HiddenField ID="4" runat="server" Value="" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="acceptBtn" EventName="ServerClick" />
<asp:AsyncPostBackTrigger ControlID="acceptAllBtn" EventName="ServerClick" />
</Triggers>
</asp:UpdatePanel>

这里是被调用的函数:

Protected Sub AcceptSuggestion()

Dim params As String
params = 1.Value
Dim param() As String = Split(params, "|", , CompareMethod.Text)

update(param)

End Sub

好吧,我猜问题不是更新面板也不是触发器。

这是我调用按钮的 javascript 函数,无论如何我都找不到让它工作,我觉得我已经尝试了所有方法。

function acceptButton(i) {
                var params = "";
                params += document.getElementById("var1" + i).textContent;
                params += "|";
                params += document.getElementById("var2" + i).textContent;
                params += "|";
                params += document.getElementById("var3" + i).textContent;
                params += "|";
                params += document.getElementById("var4" + i).textContent;
                params += "|";
                params += document.getElementById("var5" + i).textContent;


                var bp = document.getElementById('<%=1.ClientID%>');
                bp.value = params;

                var ri = document.getElementById('<%=2.ClientID%>');
                ri.value = i;

                var Status = document.getElementById('<%=3.ClientID%>');
                Status.value = 1;

                $('#<%=acceptBtn.ClientID%>').off().click();

            }

【问题讨论】:

    标签: asp.net triggers updatepanel


    【解决方案1】:

    是的,我认为这是因为 Web 窗体的工作原理:) 它触发不同的事件,您可以看到整个页面生命周期 Here。我认为您的问题的解决方案是在您的页面 Load 方法或 Init 方法中使用,并在方法顶部使用此代码。

    if(this.IsPostBack)
    {
        return;
    }
    

    【讨论】:

    • 感谢您的回答,但我已经在检查该页面是否为 PostBack。 Page_Load 验证按预期工作,但 AcceptSuggestion 函数仍被调用 3 次。
    • 对不起,您还没有发布您的控制器,我无法检查您是否检查 PostBack。在那种情况下,如果我是你,我会在页面生命周期设置断点中实现所有方法,还要检查调用你的函数的事件。您可以检查 console.log(arguments.callee) 从哪里调用您的函数并查看调用它的内容。
    • 对此我很抱歉。我不太明白你的第二句话“如果我是你,我会在页面生命周期设置断点中实现所有方法”。 “console.log(arguments.callee)”的事情,我猜你想看看javascript函数被调用了多少次,如果是这样,它只会被调用一次。对不起,我是 javascript 新手 :(
    • 否,您可以通过控制台日志查看谁调用了您的函数。通过实现 Web 表单生命周期中的所有方法并对它们进行断点,您将更清楚地了解发生了什么
    猜你喜欢
    • 2020-05-03
    • 2017-02-02
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多