2016-03-21 46 views
0

我想从javascript调用“AcceptSuggestion”。我模拟点击“acceptBtn”,然后我想刷新一个表格行。它正在工作......但“AcceptSuggestion”函数被调用三次。有人知道为什么我试图在点击前解除“acceptBtn”,但我没有运气。jQuery - 函数被调用三次

这里是更新面板:

<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(); 

      } 

回答

0

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

if(this.IsPostBack) 
{ 
    return; 
} 
+0

感谢您的回答,但我已经检查,如果该页面是一个回发。 Page_Load验证按预期工作,但AcceptSuggestion函数仍被调用3次。 –

+0

对不起,您没有发布您的控制器,我无法检查是否回发。在那种情况下,如果我是你,我会实现页面生命周期设置断点中的所有方法,同时检查调用你的函数的事件。您可以通过console.log(arguments.callee)来检查函数的调用方式,并查看调用它的东西。 –

+0

对此我很抱歉。 我不太理解你的第二句话“在那种情况下,如果我是你,我会在页面生命周期设置断点中实现所有方法”。 “console.log(arguments.callee)”的东西,我想你试图看看javascript函数被调用了多少次,如果是这样,它只被调用一次。 对不起,但我是新来javascript:( –