2010-03-22 42 views
6

我已经继承了一些代码,它使用div将页面分成多个标签。在第一页上有许多必需的字段和正则表达式验证器。问题是用户可以切换到另一个选项卡,触发回发并使第一页上的验证器失败,从而导致混乱。如何在回发之前在客户端上调用RequiredFieldValidator

我想要做的是在用户选择另一个选项卡时在第一页上执行验证,从而防止它们移到新选项卡,直到第一页有效。

<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需要启动验证器。

谢谢!

UPDATE:由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中使用验证组和额外的逻辑。

回答

2

ASP.NET创建一个全局javascript函数Page_ClientValidate,你可以打电话到火验证:

function isValid() { 
    return Page_ClientValidate(); 
} 
+0

+1谢谢,只要在其他选项卡上没有其他验证程序,就应该可以工作,我最好现在检查:) – si618 2010-03-22 00:34:22

+0

您也可以传递要验证的验证组,例如:Page_ClientValidate( “Registration”);' – 2010-03-22 00:40:24

+0

这非常接近,验证器正在点击onclick,但即使返回“false”,锚仍然被移动到另一个标签。 – si618 2010-03-22 00:58:39

2

您可以尝试使用每个选项卡验证组。从一个选项卡中单击到另一个,你会叫的东西,像这样在标签名代表确认团组:

function TabValidate(tabName) { 
    if (Page_ClientValidate(tabName)) { 
     //do stuff 
    } 
} 

加成我的评论中提到这一点,但我想我会添加到我的帖子。如果在其他选项卡上没有任何其他验证程序,那么另一个解决方案是简单地标记其他选项卡上的其他.NET控件,这些控件可以使用CausesValidation =“false”触发回发(例如,使用AutoPostBack =“true”的DropDownLists)

+0

+1谢谢,其他选项卡上没有验证器,但有很好的信息。 – si618 2010-03-22 00:42:24

+0

如果在其他选项卡上没有任何其他验证程序,则另一种解决方案是简单地标记其他选项卡上的其他.NET控件,这些控件可以使用CausesValidation =“false”触发回发(例如,使用AutoPostBack =“true”的DropDownLists) 。 – Thomas 2010-03-22 00:54:52

相关问题