У меня есть таблица клиентов, в каждой строке есть метод, который выскакивает во встроенную форму, отображая сведения о клиентах. Также на этой странице есть поиск, некоторые вкладки и некоторые ссылки и функции href.
Что я пытаюсь сделать, это запретить пользователю оставлять эту форму в несохраненном состоянии. поэтому у меня переменная formChanged установлена в TRUE при изменении ввода формы или вставке. ЕСЛИ formChanged == true, то я не хочу, чтобы пользователь мог щелкнуть ссылку или выполнить поиск, пока не подтвердит, сохранять данные или нет.
Я использую следующее, чтобы предложить пользователю:
$(document).click(function(eve) {
if (!$(eve.target).is('#form *')) {
if (formChanged) {
if (confirm("Do you want to save the data or continue to edit?")) {
$('#form').submit();
return true;
}
else { return false; } //here I do not want to submit the form OR continue with the openForm() method;
}
}
});
HTML-разметка (упрощенная) выглядит следующим образом:
<a href="/new">New Customer</a>
<a href="javascript:performSearch();">Search</a>
<table>
<tr>
<td onclick="openForm(1);">Customer One</td>
</tr>
<tr>
<td onclick="openForm(2);">Customer Two</td>
</tr>
<tr>
<td><form> //form gubbins loaded via ajax in here </form></td>
<tr>
<td onclick="openForm(2);">Customer Two</td>
</tr>
</table>
Проблема, с которой я столкнулся, заключается в том, что я могу перехватить логику подтверждения, но другие функции, такие как openForm & executeSearch (), по-прежнему продолжают выполняться.
В идеале я хотел бы ТОЛЬКО запускать функции / следовать по URL, если пользователь выбирает СОХРАНИТЬ, и ничего не делать, если пользователь нажал ОТМЕНА.
Очевидное решение состоит в том, чтобы поместить эту логику в функции openForm и выполнять функции поиска, но это чрезвычайно упрощенный пример, поскольку на реальной странице есть десятки различных функций, которые совместно используются на многих страницах, и, следовательно, это на самом деле невозможно