2012-04-26 2 views
1

Я hava приложение ASP.NET Web Forms.Отключить кнопку, помещенную внутри шаблона ASP.NET при щелчке по Javascript

Моя цель - отключить кнопку отправки btnFinish при щелчке пользователя, чтобы избежать нескольких отправлений.

<asp:Button ID="btnFinish" runat="server" Text="Finish" UseSubmitBehavior="false" 
CausesValidation="true" CommandName="MoveComplete" CssClass="buttonStyle"/> 

функция Javascript является:

function Validate(btnFinishId) { 

      btnObj = document.getElementById(btnFinishId) 

      if (Page_IsValid) { 
       btnObj.disabled = true 
      } 
      else { 
       alert('Page has some validation error'); 
       } 

      // this is to prevent the actual submit 
      e.preventDefault(); 

      return false; 
    }; 

btnFinish помещается в FinishNavigationTemplate в ASP.NET Wizard Control. Поэтому для того, чтобы избежать ошибок во время выполнения, мне нужно, чтобы получить ClientID элемента управления программными средствами, а затем добавить его в OnClientClick случае кнопки:

Button btFinish = MyWizard.FindControl("FinishNavigationTemplateContainerID$btnFinish") as Button; 

if (btFinish != null){ 
    btFinish.Attributes.Add("onclientclick", "Validate('" + btFinish.ClientID + "');"); 
} 

Но это не работает. Я использую Firebug, чтобы проверить страницу, отображаемую браузером, но хотя исходный код выглядит идеально, после нажатия кнопки Javascript функция не выполнена.

Если в функции Javascript заменяю Validate(btnFinishId) с Validate() и вместо того, чтобы использовать код позади, чтобы добавить OnClientClick я пишу:

<asp:Button OnClientClick="Validate();" "ID="btnFinish" runat="server" Text="Finish" UseSubmitBehavior="false" 
    CausesValidation="true" CommandName="MoveComplete" CssClass="buttonStyle"/> 

Функция выполняется, но, конечно, не делать то, что я хочу , потому что отсутствует идентификатор кнопки. У кого-нибудь есть решение?

ответ

3

Вы на правильном пути. Нечто подобное должно работать:

<script type="text/javascript"> 
    validate = function(btn){ 

     //trigger client-side validation 
     var valid = Page_ClientValidate(""); 

     //disable the button if the form is valid 
     btn.disabled = valid; 

     //trigger postback if the form is valid 
     //otherwise do nothing 
     return valid;       
    } 
</script> 
<asp:Button ID="btnFinish" runat="server" Text="Finish" OnClientClick="return validate(this);" OnClick="btnFinish_Click" ... /> 

Это выглядит вид назад, но вы могли бы сократить функции, как это:

<script type="text/javascript"> 
    validate = function(btn){ 
     btn.disabled = Page_ClientValidate("");       
     return btn.disabled;       
    } 
</script> 
+0

Спасибо! Он отлично работает! Однажды я потерял возможность найти решение! Я обычно использую MVC и jQuery, поэтому, когда мне приходится изменять ASP.NET Web Forms с помощью Javascript, я действительно расстраиваюсь! – CiccioMiami

+0

Без проблем! Рад, что у вас это работает :) –

0

Один из способов создать нормальную кнопку HTML на странице, добавить присоединять событие click с jQuery. Затем вы можете скрыть кнопку .net с помощью css.

В событии click для вашего html buttom вы можете щелкнуть все кнопки .net.

$("#yourbutton").trigger("click"); 
Смежные вопросы