2012-04-03 4 views
1

У меня есть куча текстовых полей на странице и кнопка отправки. Я проверил событие TextChanged текстового поля, чтобы выполнить метод на стороне сервера. Пользователь вводит значения в текстовые поля, выводит их в следующее текстовое поле (запускает событие с изменением текста) и, наконец, нажимает кнопку отправки, которая вызывает другой метод на стороне сервера. Все функции асинхронны. Метод submit должен быть выполнен только после завершения метода textchange, поскольку оба они используют одни и те же данные. Иногда проблема заключается в том, что метод textchange занимает немного больше времени, и метод отправки запускается до завершения функции textchange. Как я могу это предотвратить? Как заблокировать/поставить в очередь функции?jquery - предотвращение этой гонки состояние

ответ

1

Не запирайте и не ставьте в очередь! Просто отключите кнопку отправки, пока событие изменения + ajax не будет завершено.

$('#submitBtn').attr('disabled', 'disabled'); 

Или JQuery 1.6+:

$('#submitBtn').prop('disabled', true); 

И когда изменение Аякс отделка:

$('#submitBtn').attr('disabled', '');//or $('#submitBtn').prop('disabled', false) 
+0

Я думал об этом раньше, но проблема в моем случае заключается в том, что, когда пользователь находится в последнем текстовом поле, они не выходят, чтобы вызвать функцию изменения текстового поля. Они прямо нажимают кнопку отправки (которая затем запускает функцию изменения текстового поля). Если я отключу отправку, они не нажимают кнопку или где-либо еще в форме, чтобы вызвать изменение. Любые другие предложения? – tempid

+0

@enigma. Затем сохраните флаг с истинным, когда все события изменения будут выполнены. Захватите событие отправки, и если флаг имеет значение false, запретите использование по умолчанию. Как так? – gdoron

+0

Спасибо, это то, что я закончил, и, похоже, работает нормально. – tempid

Смежные вопросы