В моем приложении asp.NET я реализовал элемент управления для проверки входных данных форм с использованием логики на стороне сервера.Postback не запускается после javascript на событие изменения
Идея состоит в том, чтобы перетащить элемент управления туда, где он нужен, настроить его в коде позади и форма будет проверена. Эта проверка выполняется в событии onchange каждого поля и при отправке формы - синхронный вызов ajax на стороне сервера.
Это работало нормально, пока я не опубликовал его в IIS.
Проблема заключается в следующем: пользователь пишет что-то в текстовом поле. Затем, сосредоточив внимание на этом текстовом поле, нажимает кнопку или ссылку, не связанную с проверкой формы. Выполняется валидация вызова ajax (jQuery onchange fire), а обратная передача кнопки не достигается. Посредством отладки я обнаружил, что проблема заключается в вызове ajax - это как-то предотвращение срабатывания обратной передачи (почти похоже на проблему синхронизации).
Я уменьшил проблему до такой степени, что предупреждение, похоже, вызывает то же самое, что и вызов ajax. Пожалуйста, посмотрите на следующий проект: EDIT: ссылка удалена, потому что я не могу опубликовать более двух ссылок на одном и том же сообщении - извините!
Рассмотрите первые 2 текстовых поля и кнопку: 1) Если вы пишете что-то по первому, нажмите кнопку: поменяет огонь, появляется предупреждение, а обратная передача не возникает. 2) Если вы напишете что-то на втором, нажмите кнопку: поменять огонь и посылку.
Может кто-нибудь объяснить, почему это происходит, и если есть какое-либо решение для этого, т. Е. Сделать postback-огонь после завершения работы javascript?
Я могу думать о 2 способах решения моей проблемы, но мне нужно знать (внутри события изменения текстового поля) идентификатор элемента управления, щелкнутого пользователем. Любой способ получить его? Таким образом, я мог: явно вызвать элемент управления OR verifiy, если он не принадлежит элементам управления формы, и не регистрирует события в этот момент (что будет иметь смысл).
Заранее спасибо.
EDITED 22-10-2014:
Участок утолщается. Кажется, это проблема синхронизации. Проверьте this other test application, где я удалил предупреждения (это сосредоточило слишком много внимания и на самом деле не связано с проблемой, поскольку я не использую оповещения в своем проекте - я использую маленькие воздушные шары) и просто оставил вызов AJAX.
Теперь, на стороне сервера (WebMethod), я поставил Thread.Sleep(). Если поток слишком долго спит, он, похоже, пропускает обратную передачу. В моем случае, в моей среде разработки, порог, похоже, составляет 80 мс. Если вызов ajax занимает менее ~ 80 мс, тогда выполняется обратная передача, если требуется больше, он пропускает обратную передачу. Любые идеи или похожие (разрешенные) проблемы, которые вы видели? Обратите внимание, что мой вызов ajax имеет async: false.
EDITED 24-10-2014:
Наконец еще раз взглянуть на это. Я думаю, что я, возможно, пришел к возможному решению, хотя мне не нравится идея полагаться на setTimeout для обработки кнопки отправки «щелчок» перед «focusin» (тот же элемент управления).
Я изменил логику (по-прежнему достигая той же цели) и теперь использую разные события. Теперь мне нужно различать, когда подавать управляющие выстреливает «focusin» событие, потому что он просто получил фокус (1) или была нажата (2):
- Пользователь может просто быть обходе (проверяет последнее поле, было сосредоточиться - если он принадлежит к виду проверяемого)
- пользователь может щелкнули (не проверяет последнее поле, которое было в центре внимания, но в целом виде, а затем передает или нет)
имеют посмотрите at this new test app, который ближе к тому, что у меня есть в моем проекте.
Можете ли вы помочь мне найти лучший способ обработки/обработки события click перед событием focusin на одном элементе управления без чего-то непредсказуемого, как setTimeout? Если мне нужно полагаться на setTimeout, сколько, по вашему мнению, нужно установить wait? На моей машине работает 150 мс, но на других лицах может потребоваться больше времени? Что-то вроде своего обратного вызова было бы идеальным.
Еще раз спасибо
'e.target.id' возвращает идентификатор элемента, но я не знаю, как это решить вашу проблему. – Rohith
Привет Rohith. e.target дает мне идентификатор вызывающего объекта, и это TextBox1 или TextBox2 в моем маленьком примере. Это не помогает. Что поможет идентификатор элемента управления, который заставил фокус потеряться в текстовых окнах. Предположим, вы что-то писали в TextBox1, а затем нажали LinkButton25. Что мне помогло бы узнать, в событии Textbox1.change, что нажал LinkButton25, и фокус (действие, если он сработает!) Будет изменен на этот элемент управления. – ca2s7l
Для этого см. Этот [ответ] (http://stackoverflow.com/a/497108/1374307) и [это] (http://stackoverflow.com/a/11278006/1374307) – Rohith