2016-03-21 2 views
0

Я пытаюсь вызвать «AcceptSuggestion» из javascript. Я имитирую клик на «acceptBtn», а затем я хочу обновить строку таблицы. Он работает ... но функция «AcceptSuggestion» вызывается три раза. Кто-нибудь знает почему? Я aleady пытался отвязать «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 Forms :) Это выстреливает различные события, вы можете увидеть жизненный цикл Here всей страницы. Я думаю, что решение вашей проблемы используется на вашем методе Load или в методе Init, и используйте этот код в верхней части метода.

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

Спасибо за ваш ответ, но я уже проверяю, является ли страница PostBack. Верификация Page_Load работает по назначению, но функция AcceptSuggestion все еще вызывается 3 раза. –

+0

К сожалению, вы не разместили свой контроллер, и я не могу проверить, будет ли вы проверять PostBack. В этом случае, если бы я был вами, я бы выполнил все методы в контрольных точках набора жизненного цикла страницы, а также проверил событие, которое вызывает вашу функцию. Вы можете проверить, откуда ваша функция вызывается console.log (arguments.callee), и видеть, что она называется. –

+0

Прошу прощения за это. Я не совсем понял ваше второе предложение «В таком случае, если бы я был вами, я бы использовал все методы в наборах точек жизненного цикла страницы». «console.log (arguments.callee)» вещь, я думаю, вы пытаетесь увидеть, сколько раз вызывается функция javascript, если это так, она называется только один раз. Прошу прощения, но я новичок в javascript :( –