【发布时间】:2010-03-22 00:26:42
【问题描述】:
我继承了一些使用 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 来实现与点击事件的跨浏览器兼容性。这仅在其他选项卡上没有验证器的情况下才有效,根据 Thomas 的回答,如果添加任何内容,我将需要在 isValid 中使用验证组和额外的逻辑。
【问题讨论】:
标签: asp.net validation