Я унаследовал некоторый код, который разбивает страницу на вкладки, используя div. На первой странице есть много обязательных валидаторов полей и регулярных выражений. Проблема в том, что пользователь может переключиться на другую вкладку, вызвать обратную передачу и завершить проверку на первой странице, оставив вещи в беспорядке.
То, что я хочу сделать, - это выполнить проверку на первой странице, когда пользователь выбирает другую вкладку, тем самым предотвращая переход на новую вкладку до тех пор, пока первая страница не станет действительной.
<ul>
<li><a href="#tab1">Tab 1</a> </li>
<li><a href="#tab2" onclick="return isValid();">Tab 2</a></li>
<li><a href="#tab3" onclick="return isValid();">Tab 3</a></li>
</ul>
Где isValid
нужно запустить валидаторы.
Спасибо!
ОБНОВЛЕНИЕ: Ответ, предоставленный codeka, довольно близок, однако, поскольку мне нужно предоставить атрибуты href и onclick (чтобы избежать путаницы в отображении), переключатель табуляции (привязки) все еще выполняется даже если проверка не пройдена. Вот как я это решил. Отказ от ответственности: ужасный код впереди
<ul>
<li><a id="tab1Tab" href="#tab1" style="display:none"/><a onclick="isValid('tab1');">Tab 1</a></li>
<li><a id="tab2Tab" href="#tab2" style="display:none"/><a onclick="isValid('tab2');">Tab 2</a></li>
<li><a id="tab3Tab" href="#tab3" style="display:none"/><a onclick="isValid('tab3');">Tab 3</a></li>
</ul>
function isValid(tab) {
var valid = Page_ClientValidate();
var tabId = (valid ? tab : "tab1") + "Tab";
$("#" + tabId).click();
}
Обратите внимание на использование jQuery для кросс-браузерной совместимости с событием click. И это работает, только если на других вкладках нет валидаторов, согласно ответу Томаса, мне нужно будет использовать группы валидации и дополнительную логику в isValid
, если таковые будут добавлены.