2010-08-21 2 views
2

У меня есть кнопка отправки формы, на которой есть валидаторы asp.net, подключенные к ней. Если я создаю функцию javascript для изменения текста для обработки по клику, это не сработает. Кнопка блокирует валидаторы, а также приводит к возврату всей страницы. Heres код у меня есть:изменить текст кнопки asp.net с javascript

C#

protected void Page_Load(object sender, EventArgs e) 
{ 
    btnPurchase.Attributes["onClick"] = "submit()"; 
} 

Html

<script type="text/javascript"> 
    function submit() { 
     document.getElementById("ctl00_ContentPlaceHolder1_btnPurchase").value = "Processing"; 
    }; 
</script> 

Моя цель состоит в том, чтобы изменить кнопки текст покупке OnClick, если форма проходит проверку, а затем в своем коде позади него после возвращения формы возвращается обратно к исходному значению.

+0

Если бы это было, я бы просто сохранить себя головную боль и отключить кнопку и показать динамически добавлять какой-то «Processing ...» изображение в страница. Вы можете получить отличные изображения «spinner» без http://www.ajaxload.info/ –

+0

Проблема, с которой я столкнулся, заключается в том, что кнопка не будет отключена до тех пор, пока страница не будет отправлена ​​назад, а не на кнопку –

ответ

1

Я столкнулся с этим решением, которое работает на 100% совершенным. Я использую менеджер сценария с обновлением панелей ...

<script type="text/javascript"> 

     // Get a reference to the PageRequestManager. 
     var prm = Sys.WebForms.PageRequestManager.getInstance(); 

     // Using that prm reference, hook _initializeRequest 
     // and _endRequest, to run our code at the begin and end 
     // of any async postbacks that occur. 
     prm.add_initializeRequest(InitializeRequest); 


     // Executed anytime an async postback occurs. 
     function InitializeRequest(sender, args) { 
      // Get a reference to the element that raised the postback, 
      // and disables it. 
      $get(args._postBackElement.id).disabled = true; 
      $get(args._postBackElement.id).value = "Processing..."; 
     } 
     // Executed when the async postback completes. 
     function EndRequest(sender, args) { 
      // Get a reference to the element that raised the postback 
      // which is completing, and enable it. 
      $get(args._postBackElement.id).disabled = false; 
      $get(args._postBackElement.id).value = "Purchase"; 
     } 

</script> 
+0

. предполагая, что он использует ajax для отправки формы. – RPM1984

+0

Да, я (оригинальный плакат) использую панель обновления. –

+1

lolz, даже не понял, что вы были OP. круто, все хорошо тогда =) – RPM1984

1

Я просто спросил, очень похожий вопрос (который был дан ответ): ASP.NET Custom Button Control - How to Override OnClientClick But Preserve Existing Behaviour?

По сути вы должны сохранить существующее поведение кнопки отправки (__doPostBack). Вы делаете это с Page.GetPostBackEventReference(myButton).

Однако с проверкой это сложнее, так что вам нужно сделать проверки страницы инлайн (Page.Validate()) или создать пользовательский элемент управления, как я сделал, и переопределить OnClientClick и PostBackOptions членов.

Пользовательский контроль лучше, так как теперь я могу просто отбросить этот элемент управления на любой странице, я хочу этого поведения.

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

public string loadingText {get; set;} 

которые могут быть использованы для настройки текста загрузки на каждой странице.

Вы в основном нужно установить атрибут OnClick сделать следующее:

onclick = "if (Page_Validate()) this.text = 'Processing';{0} else return false;" 

{0} должно быть регулярное действие постбэк, извлекается из Page.GetPostBackEventReference.

Результирующая логика будет: при щелчке, проверке страницы, она будет успешной, измените текст и обратную передачу, если это не удастся, верните false - это покажет подтверждение на странице.

Установили ли кнопку по умолчанию текст «Отправить» в HTML, а затем оберните эту логику в! Page.IsPostBack, чтобы она сбросила текст в форме submit.

Надеюсь, что это поможет.

Смежные вопросы