ASP.NET和jQuery与验证控件的奇怪Javascript错误

时间:2013-04-18 20:29:49

标签: javascript jquery asp.net jquery-ui

当我激活生成DatePicker的jQuery-UI脚本时,我收到一个神秘的(对我而言)javascript错误。它工作,如果我在Visual Studio中并告诉它忽略错误。生成所选日期并根据需要将其扔到文本框中。但为什么这个错误? 仅当存在验证错误并且涉及时才会发生。

好的,这是代码。首先是asp.net页面标记:

<asp:TextBox ID="PickerDateTextBox" runat="server" Width="100" ></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
    ErrorMessage="This is required"
    ControlToValidate="PickerDateTextBox"
    >
</asp:RequiredFieldValidator>

这是jQuery:

<script type="text/javascript">
    $(document).ready(function () {
        $("#PickerDateTextBox").datepicker({
        showOn: "button",
        buttonImage: "images/picker.gif",
        buttonImageOnly: true
        });
    });
</script>

当然,包括:

<script src="Scripts/jquery-1.7.1.js"></script>
<script src="Scripts/jquery-ui-1.10.2.js"></script>

别担心,即使使用jquery 1.9,我也能得到它。

错误不在jQuery或jQuery-UI中,但在Microsoft的javascript中,这里:

var vals;
if (typeof(targetedControl.Validators) != "undefined") {
    vals = targetedControl.Validators;
}
else {
    if (targetedControl.tagName.toLowerCase() == "label") {
        targetedControl = document.getElementById(targetedControl.htmlFor);
        vals = targetedControl.Validators;
    }
}
var i;
for (i = 0; i < vals.length; i++) {
    ValidatorValidate(vals[i], null, event);
}
ValidatorUpdateIsValid();

在“i&lt; vals.length;”的行上抛出错误发生,错误是:

Unhandled exception at line 172, column 17 in http://localhost...blah blah blah
0x800a138f - Microsoft JScript runtime error: Unable to get value of the property 'length': object is null or undefined

同样,如果我没有任何类型的验证控件,就不会发生这种情况。

任何想法发生了什么以及我如何解决它?

编辑添加:

正如@ Steve-Wellens所指出的,当在.NET 4.5和jQuery 1.9.1上运行时,它运行正常。同样在.NET 4.0上。不幸的是,由于服务器的限制,我需要它在.NET 3.5上运行(我们的Web服务器是Windows 2003,无法安装.NET 4.5。我想我可以将应用程序设置为运行.NET 4.0,但@ Steve-Wellens已经提供了解决方案,因此按原样行事是好的!

1 个答案:

答案 0 :(得分:1)

这是fix / hack / kludge(添加一个空的onSelect处理程序):

$("#PickerDateTextBox").datepicker({
    showOn: "button",
    onSelect: function() {},
    buttonImage: "images/picker.gif",
    buttonImageOnly: true
});

并解释: Jquery datepicker popup not closing on select date in IE8