Функция JavaScript работает после завершения обратной связи

StackOverflow https://stackoverflow.com//questions/22070402

Вопрос

Я разрабатываю приложение .NET ASP с кодом VB позади. У меня есть 2 текстовых полеса и 1 кнопка. Кнопка при щелчке, использует JavaScript для открытия нового окна (позвоните новому окну X).

 button.OnClientClick = "ShowWindowX();return false;"
.

Функция ShowWindowX () открывает новое окно с URL-адресом, который проходит как в оба параметра из TextBox. Когда я вставляю новые значения в текстовые ящики и щелкните от текстовых ящиков (но не на кнопке), страница выполняет обратную панель, потому что я установил его, когда текстовые ящики теряют фокус, чтобы сделать сообщение, которая опубликует новые значения обратно на сервер.

Проблема в том, что если я редактирую какие-либо значения текстовых ящиков, таких как изменение от 3 до 4, и немедленно щелкните кнопку, не нажав в текстовое поле, то новые значения не подняты, поэтому я все еще получаю 3. Я пытался Чтобы заставить обратную панель, когда кнопка нажимает следующее:

 btnBBHistory.OnClientClick = "__doPostBack();ShowWindowX();return false;"
.

И хотя это приводит к тому, что обратна поступление не завершено, пока я не закрою окно, которое открывается из-за функции ShowWindowsX.

Может ли кто-нибудь посоветовать способ заставить обратную панель полностью завершить перед выполнение функции ShowWindowX (), чтобы новые значения могли быть переданы?

Спасибо заранее

Это было полезно?

Решение

Вы должны полностью изменить свой подход, насколько это не вызов AJAX, он вытирает все на странице, и страница будет обновляться.

Так что можно сделать для того, чтобы добиться этого?Вы можете проверить его на бэкэнде и добавить скрипт, если страница загружается в вызов обратной связи, как это:

if (IsPostBack)
    Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
    "ShowWindowX();", true);
.

Конечно, это можно сделать, если вы уже зарегистрировали скрипт, который генеракодицетагCode определяется в нем.

Но если вы не хотите, чтобы он показать окно каждый раз, когда появится сообщение по сообщениям, вы можете установить флаг в глобальном хранилище, например, LocalStorage, а затем проверьте его, когда вы хотите открыть окно:

btnBBHistory.OnClientClick = "__doPostBack();localStorage.callwin=true;return false;"
.

и на боковой странице боковой страницы сделайте это:

if (IsPostBack)
   Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
   "if(Boolean(localStorage.callwin)){ShowWindowX();localStorage.callwin='';}",
   true);
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top