«Грязная» функция в форме, нужен скрипт для задержки запуска до тех пор, пока данные не будут загружены

0

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

$(':input').each(function() { 
    $(this).data('initialValue', $(this).val()); 
}); 
window.onbeforeunload = function(){ 
    var msg = 'You haven\'t saved your changes.'; 
    var isDirty = false;  
    $(':input').each(function () { 
       if($(this).data('initialValue') != $(this).val()){ 
          isDirty = true; 
       } 
    });  
if(isDirty == true){ 
    return msg; 
} 
}; 

Это работает отлично, когда вы начинаете с пустой формы, но проблема, с которой я сталкиваюсь, заключается в том, что есть возможность заполнить форму существующими данными, считываемыми из базы данных, и первая часть кода срабатывает перед загрузкой данных формы, поэтому функция "onbeforeunload" всегда считает, что форма "грязная",

В идеале я хотел бы приостановить запуск первой части кода до тех пор, пока не будут загружены все данные формы. Я использую ASP/VBScript для загрузки/загрузки базы данных.

благодаря

  • 0
    Данные загружаются не с помощью сценария AJAX, а при загрузке страницы с использованием ASP / VBScript. На странице 1 пользователь вводит свой код доступа и переходит на главную страницу ASP, которая обращается к базе данных на основе своего кода и заполняет поля формы, используя вызов функции VBScript из каждого поля формы, таким образом: <input value = "<% = GetValue ("myField")%> "/> Так что с этим методом я не знаю, как определить, когда все поля были заполнены.
Теги:

2 ответа

0

Поместите код, который устанавливает исходные значения внутри вызываемой функции при загрузке данных:

function setOriginalValues() {
    $(':input').each(function() { 
        $(this).data('initialValue', $(this).val()); 
    });
}

Замечание: вы можете сломать .each(), вернув false. Это нужно сделать после обнаружения "грязного" значения:

$(':input').each(function () { 
   if($(this).data('initialValue') != $(this).val()){ 
      isDirty = true; 
      return false;
   } 
});  
0

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

Если вы заполняете Ajax, вы должны запустить свою функцию в обратном вызове, как предложили другие. Однако, если нет, вы можете просто поместить код в обработчик, который ждет, пока страница не будет готова.

http://api.jquery.com/ready/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню