Подтверждение выхода в Javascript с элементами управления Telerik - PullRequest
1 голос
/ 19 декабря 2011

Я использую элементы управления Telerik для своего проекта. На моей странице есть несколько ссылок на другую страницу, несколько radtextbox и radbutton (это вызывает обратную передачу). Когда значения текстового поля изменены, кнопка становится активной. Затем в моем window.onbeforeunload я проверяю, включена ли кнопка или нет. Если он включен, появится диалоговое окно подтверждения. Код выглядит так:

window.onbeforeunload = function (evt) {
    var ClientGeneral_btnSave = $find('<%=btnSave.ClientID %>');
    if (ClientGeneral_btnSave.get_enabled() == true) {
    var message = 'You will lose unsaved data?';
    if (typeof evt == 'undefined') {
       evt = window.event;
    }
    if (evt) {
       evt.returnValue = message;
    }
    return message;
}

Этот код работает хорошо. Когда я закрываю вкладку, появляется диалоговое окно подтверждения. Когда я нажимаю на ссылки, это делает. Но когда я нажимаю на сам btnSave, также появляется диалоговое окно, что является необычным. Я хочу, чтобы btnSave НЕ вызывал onbeforeunload событие

Скажите, пожалуйста, как это сделать.

Заранее спасибо

1 Ответ

0 голосов
/ 19 декабря 2011

Это сработает перед загрузкой, если btnSave отправит сообщение, которое выглядит так, как будто оно есть. Поэтому у вас есть несколько вариантов

  1. Запретить btnSave отправлять сообщения обратно, если вам это не нужно. Самый простой способ сделать это - поместить этот атрибут в разметку asp: Button

    OnClientClick = "return false"

  2. Подключите метод javaScript / jQuery, чтобы отключить событие onbeforeunload. Я делал это раньше, сохраняя значение в скрытом поле и используя его, чтобы сигнализировать, что событие onbeforeunload должно запускаться.

например

$('#<%= btnSave.ClientID %>').bind('click', function(e){

   $('#myHiddenFieldId').val('1');

});

и измените свой обработчик on beforeunload, чтобы убедиться, что скрытое поле не равно 1 (установите 0 по умолчанию, т.е.

window.onbeforeunload = function (evt) { 

   if( $('#myHiddenFieldId').val() != '1')
   {
      //your logic here
   }

}

Возможно, вы могли бы сделать что-то лучше, отсоединив обработчик onbeforeunload в событии щелчка btnSave, используя JQuery, а не скрытое поле для переопределения.

Вариант 2 может стать неудобным - так что удачи

...