jQuery - 函数被调用三次

jQuery - function is being called three times

我正在尝试从 javascript 呼叫 "AcceptSuggestion"。我模拟单击 "acceptBtn" 然后我想刷新 table 行。它正在工作...但是 "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();

            }

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

if(this.IsPostBack)
{
    return;
}