У меня есть веб-форма с полем даты начала. Я привязал jquery datepicker к полю txt. Теперь, когда я выбираю дату в FF, выбранная дата заполняется в текстовом поле, и всплывающее окно календаря закрывается. Однако, когда я делаю то же самое в IE8, выбранная дата заполняется в текстовом поле, но всплывающее окно остается открытым. Я также заметил, что ошибка script возникает, как только я выбираю дату во всплывающем календаре.
Я использую jquery 1.3.2, jquery-ui 1.7.2 и .NET 3.5. Вот пример моего кода:
<script type="text/javascript">
$(document).ready(function() {
$("#<%=txtStartDate.ClientID%>").datepicker({
changeMonth: true,
changeYear: true,
showButtonPanel: true,
showOn: 'button',
buttonImage: '/_layouts/images/CALENDAR.GIF',
buttonImageOnly: true
});
});
</script>
<div id="stylized">
<asp:ValidationSummary ID="vs" runat="server" CssClass="messages-error" HeaderText=" Action required before the form can be submitted." ForeColor="" ValidationGroup="sh" />
<div class="formrow">
<div class="ms-formlabel formlabel">
<asp:Label ID="lblStartDate" runat="server" CssClass="ms-standardheader" AssociatedControlID="txtStartDate">Start Date:</asp:Label>
</div>
<div class="ms-formbody formfield">
<asp:RequiredFieldValidator ID="reqStartDate" runat="server" ControlToValidate="txtStartDate" ErrorMessage="Start Date is a required field." Text="*" Display="Dynamic" ValidationGroup="sh"></asp:RequiredFieldValidator>
<asp:CompareValidator ID="cvStartDate" runat="server" ControlToValidate="txtStartDate" ErrorMessage="Date must be in the format MM/DD/YYYY" Text="*" Display="Dynamic" ValidationGroup="sh" Operator="DataTypeCheck" Type="Date"></asp:CompareValidator>
<asp:TextBox ID="txtStartDate" runat="server"></asp:TextBox>
<span class="formMessage">ex. MM/DD/YYYY</span>
</div>
</div>
<div id="buttonrow">
<asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="ms-ButtonHeightWidth" OnClick="Submit_Click" ValidationGroup="sh" />
<asp:Button ID="btnCancel" runat="server" Text="Cancel" CssClass="ms-ButtonHeightWidth" OnClick="Cancel_Click" CausesValidation="false" />
</div>
</div>
Здесь ошибка script, которую я получаю в IE, когда я выбираю дату:
'length' является нулевым или не является объектом
WebResource.axd
Здесь код, из которого выдается ошибка:
function ValidatorOnChange(event) {
if (!event) {
event = window.event;
}
Page_InvalidControlToBeFocused = null;
var targetedControl;
if ((typeof(event.srcElement) != "undefined") && (event.srcElement != null)) {
targetedControl = event.srcElement;
}
else {
targetedControl = event.target;
}
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();
}
Это происходит на .length в цикле for в конце. Vals имеет значение null и не найден в предыдущем if/else. Я прошел через javascript, и если (typeof (targControl.Validators)!= "undefined" ) возвращает false, а затем if (targControl.tagName.toLowerCase() == "label" ) также возвращает false. Таким образом, длина равна null или не является объектной ошибкой.
Теперь я не уверен, что всплывающее окно datepicker, не закрывающееся в IE, и ошибка script в файле WebResources.axd связаны с ошибками, но я склоняюсь таким образом. Может ли кто-нибудь сказать мне, почему всплывающее окно не закрывается?