我继承了一些使用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事件的跨浏览器兼容性。这只适用于其他标签上没有验证器的情况,根据Thomas的回答,我需要在isValid
中使用验证组和额外的逻辑(如果有的话)。
答案 0 :(得分:2)
ASP.NET创建一个全局javascript函数Page_ClientValidate
,您可以调用它来激活验证器:
function isValid() {
return Page_ClientValidate();
}
答案 1 :(得分:2)
您可以尝试为每个标签使用验证组。在从一个选项卡到另一个选项卡的单击时,您可以调用类似于选项卡名称代表验证组的内容:
function TabValidate( tabName ) {
if ( Page_ClientValidate( tabName ) ) {
//do stuff
}
}
ADDITION 我在评论中提到了这一点,但我想我会把它添加到我的帖子中。如果其他选项卡上没有任何其他验证器,那么另一个解决方案是简单地标记其他选项卡上的其他.NET控件,这些控件可以使用CausesValidation =“false”触发回发(例如,DropDownLists with AutoPostBack =“true”)