使用jquery禁用asp.net验证器

时间:2009-10-29 20:22:00

标签: asp.net javascript jquery

我正在尝试使用jquery禁用验证器。

我已经看过了 Disable ASP.NET validators with JavaScript 和其他几个人一样。

似乎没有工作但它的突破。

我的代码:

$('.c_MyValdiators').each(function() {

    var x = $(this).attr('id');
    var y = document.getElementById(x);
    ValidatorEnable(y[0], false);
});

我收到错误: val未定义 [打破此错误] val.enabled =(启用!=假); \ r \ n

或者如果我使用

$('.c_MyValdiators').each(function() {
    ValidatorEnable($(this), false); OR ValidatorEnable($(this[0]), false);
  });

我收到错误:

val.style未定义 [打破此错误] val.style.visibility = val.isvalid? “隐藏”:“可见”; \ r \ n

有任何想法或建议吗?

8 个答案:

答案 0 :(得分:6)

我相信ValidatorEnable采用ASP.net ID而不是ASP.net生成的ClientID。您还需要在CodeBehind中进行验证。

这是一个例子:

特别用于能够启用或禁用验证器。如果您只想在某些情况下进行验证,则可能需要更改服务器和客户端上的激活,否则您将发现用户无法提交页面。

以下是上一个示例,其中只有在取消选中复选框时才能验证字段:

public class Conditional : Page {
    public HtmlInputCheckBox chkSameAs;
    public RequiredFieldValidator rfvalShipAddress;
    public override void Validate() {
        bool enableShip = !chkSameAs.Checked;
        rfvalShipAddress.Enabled = enableShip;
        base.Validate();
    }
}

这是客户端的等价物:

<input type=checkbox runat=server id=chkSameAs 
   onclick="OnChangeSameAs();" >Same as Billing<br>
<script language=javascript>
function OnChangeSameAs() {
    var enableShip = !event.srcElement.status;
    ValidatorEnable(rfvalShipAddress, enableShip);
}
</script>

参考:http://msdn.microsoft.com/en-us/library/aa479045.aspx

答案 1 :(得分:6)

我偶然发现了你的问题[一年后]。 我也想使用JQuery在页面上禁用所有验证器,这是我处理它的方式。

$('span[evaluationfunction]').each(function(){ValidatorEnable(this,false);});

我在页面上查找具有evaluatefunction属性的每个span,然后为每个span调用ValidatorEnabled。

我认为代码的$('this')部分是导致hickup的原因。

答案 2 :(得分:2)

ValidatorEnable(document.getElementById($(this).attr('id')), true); 

答案 3 :(得分:2)

我有另一种解决方案,即使用span标签的'enabled'属性作为验证器。我在表单上显示或隐藏了不同的div,因此我需要禁用隐藏div中字段的验证。该解决方案关闭验证而不触发它们。

如果你有一组RequiredFieldvalidator控件,它们都包含一个可以用来抓取它们的公共字符串,那么jquery是这样的:

$("[id*='CommonString']").each(function() {
    this.enabled = false;   // Disable Validation
});

or

$("[id*='CommonString']").each(function() {
    this.enabled = true;    // Enable Validation
});

希望这有帮助。

约翰

答案 4 :(得分:1)

我只是遇到了同样的问题,感谢其他答案,因为它有助于发现问题,但他们没有详细说明原因。

我认为这是因为ValidatorEnable()需要一个与ID相对的DOM对象(即验证控制对象)。

$(selector).each()将“this”设置为当前迭代的DOM元素,即从jquery文档中引用:

  

“更重要的是,回调是在当前环境中触发的   DOM元素,因此关键字this指的是元素。“ - http://api.jquery.com/each/

因此,您需要这样做:document.getElementById($(this).attr('id')

相反ValidatorEnable(this, true);没问题。

有趣的是,Russ的答案提到需要禁用服务器端验证,这确实有意义 - 但我不需要这样做(这有关!)。

废弃我以前的评论,这是因为我以前在控制台上禁用了控制器。

答案 5 :(得分:0)

ValidatorEnable函数将对象作为第一个参数,而不是对象id的字符串。

答案 6 :(得分:0)

以下是处理此问题的简单方法。

将新类添加到Validation控件。

然后使用jquery查找该类并禁用该控件。

示例:

if (storageOnly == 1)
   {
        $('#tblAssignment tr.assdetails').addClass('hidden');

        $('span[evaluationfunction]').each(function ()
        {
            if ($(this).hasClass('assdetail'))
            { ValidatorEnable(this, false); }
        });
    }
    else
    {
        $('#tblAssignment tr.assdetails').removeClass('hidden');
    }

* 就像魅力一样。 **对于你富有想象力的类型,assdetail ==任务细节。

这里取决于if条件,我要么隐藏行然后禁用验证器,要么从行中删除隐藏的类..

答案 7 :(得分:0)