Когда событие запускается пользователем в IE, ему присваивается объект window.event
. Единственный способ узнать, что вызвало событие, - это получить доступ к объекту window.event
(насколько я знаю)
Это вызывает проблему в валидаторах ASP.NET, если событие запускается программно, например, при запуске события через jQuery. В этом случае объект window.event
хранит последнее инициированное пользователем событие.
Когда событие onchange
запускается программным способом для текстового поля, к которому присоединен валидатор ASP.NET, проверка прерывается, потому что он смотрит на элемент, который вызвал последнее событие, а не на тот элемент, который валидатор для.
Кто-нибудь знает способ обойти это? Это кажется проблемой, которую можно решить, но, глядя в онлайн, большинство людей просто находят способы игнорировать проблему, а не решать ее.
Чтобы объяснить, что я конкретно делаю:
Я использую плагин выбора времени jQuery в текстовом поле, с которым также связаны 2 валидатора ASP.NET. Когда время изменилось, я использую панель обновления для отправки обратно на сервер, чтобы динамически выполнять некоторые действия, поэтому мне нужно вызвать событие onchange, чтобы инициировать обратную передачу для этого текстового поля.
Средство выбора времени jQuery работает путем создания скрытого неупорядоченного списка, который становится видимым при щелчке по текстовому полю. При щелчке по одному из элементов списка событие «изменение» запускается программным способом для текстового поля с помощью метода jQuery change()
.
Поскольку триггером для события был элемент списка, IE видит элемент списка как источник события, а не текстовое поле, как это должно быть.
Я не слишком обеспокоен тем, что этот валидатор ASP.NET работает, как только текстовое поле изменяется, мне просто нужно обработать событие "change
", чтобы мое текстовое поле вызывалось для события обратной передачи. Проблема в том, что валидатор генерирует исключение в IE, которое останавливает запуск любого события.
Firefox (и я предполагаю, что другие браузеры) не имеют этой проблемы. Только IE из-за другой модели событий. Кто-нибудь сталкивался с этим и видел, как это исправить?
Я обнаружил, что об этой проблеме сообщили в нескольких других местах, но они не предлагают решений: