Я наследовал некоторый код, который разбивает страницу в отделения использования вкладок. На первой странице существуют многие обязательное поле и regex блоки проверки допустимости. Проблемой является пользователь, может переключиться на другую вкладку, инициировать обратную передачу и привести блоки проверки допустимости к сбою на первой странице, оставив вещи в путанице.
То, что я хочу смочь сделать, выполняют проверку на первой странице, поскольку пользователь выбирает другую вкладку, таким образом препятствуя тому, чтобы они переместились в новую вкладку, пока первая страница не допустима.
<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 для перекрестной совместимости браузера с событием щелчка. И это только работает, если не будет никаких блоков проверки допустимости на других вкладках согласно ответу Thomas, то я должен буду использовать группы проверки и дополнительную логику в isValid
если кто-либо добавляется.
ASP.NET создает глобальную функцию javascript Page_ClientValidate
, которую можно вызвать для запуска валидаторов:
function isValid() {
return Page_ClientValidate();
}
Вы можете попробовать использовать группу проверки для каждой вкладки. При переходе с одной вкладки на другую вы вызываете что-то вроде этого, где имена вкладок представляют группы проверки:
function TabValidate( tabName ) {
if ( Page_ClientValidate( tabName ) ) {
//do stuff
}
}
ДОБАВЛЕНИЕ Я упомянул об этом в комментарии, но решил, что добавлю это в свой пост. Если на других вкладках нет других валидаторов, то другим решением будет просто пометить другие элементы управления .NET на других вкладках, которые могут запускать обратную передачу с помощью CausesValidation = "false" (например, DropDownLists с AutoPostBack = "true")