|
|
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
Добрый день. Никак не могу найти решение для задачи: есть селект с опшионами. Селект подвязан на событие onchange. Код: html 1. 2. 3. 4. 5. В методе-обработчике этого события получаю доступ к выбранному опшиону и далее провожу с ним манипуляции. Код: javascript 1. 2. 3. 4. 5. 6. 7. Проблема в том, что если очень быстро клацать по опшионам в этом селекте, то пока работа метода предыдущего вызова дойдет до конца, вызывается уже новое событие и в этом методе старые данные частично заменяются новыми и получается на выходе несоответствие реальным данным. В итоге, если быстро "бегать" по опшионам селекта, то получим что-то типа такого результата: Код: html 1. Как закрыть выполнение функции в нить (поток)? Или как ограничить одновременную работу функции в 1? Или как оградить использование переменной? Или как начинать выполнять функцию только после того, как дождемся завершения предыдущего её выполнения? Прикрутка функции setTimeout не помогла. Как в такой ситуации поступить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 14:37 |
|
||
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 14:47 |
|
||
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
Спасибо, похоже ОНО, но не могу понять как его грамотно прикрутить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 14:53 |
|
||
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
zalsilyПрикрутка функции setTimeout не помогла. Так смотря как ты это сделал... Где пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 15:51 |
|
||
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2015, 16:09 |
|
||
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
Сделал вместо тебя пример... Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Как ни клацал по селекту, ну никак не мог получить тот эффект, что ты описал вначале... Все дивы вставляются с тем значением value, что я выбирал. Никакого "совмещения" не происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 08:28 |
|
||
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
У меня твой пример 100% также работает, в смысле при очень быстром клацанье по элементам списка иногда проскакивает на выходе два значения. Для того, что бы все-таки заметить проявляющийся описанный выше эффект, добавим еще логики в код-обработчик: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. В итоге можем получить что-то вроде такого: Код: html 1. И тут можно долго "колдовать" что б забить еще логики для "тормозов" метода с целью все же заставить почаще давать "сбои". Вопрос мой лишь в том, как уйти от ситуации, когда один и тот же метод "SetVal" можно было вызывать лишь после того, как его предыдущий вызов полностью отработает. В серверных языках программирования есть такое понятие "безопасный код", "ограничение на доступ к переменной, методу" и т.п. Вот как тут что-то подобное прикрутить??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2015, 11:44 |
|
||
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
zalsily , пример твой не запускал... Но! Передавай в обработчик не ссылку на селект, а сразу значение селекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 09:55 |
|
||
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
zalsilyВопрос мой лишь в том, как уйти от ситуации, когда один и тот же метод "SetVal" можно было вызывать лишь после того, как его предыдущий вызов полностью отработает. Если говорить об обработчиках событий, как в твоем случае, так они вызываются только в момент наступления своих событий. "Ждать чего-то" они не станут. Но выполняться начнут после получения управления. Напомню, что JS не является языком реального времени. Программные "блоки" получают управление по мере "высвобождения очереди". Если система сильно загружена, то возможно паузы и не соответствия размеров таймаутов. Но порядок "следования" при выполнении не меняется. Что запущено ранее - получит управление ранее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 10:03 |
|
||
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
zalsilyИ тут можно долго "колдовать" что б забить еще логики для "тормозов" метода с целью все же заставить почаще давать "сбои". Вопрос мой лишь в том, как уйти от ситуации, когда один и тот же метод "SetVal" можно было вызывать лишь после того, как его предыдущий вызов полностью отработает. В серверных языках программирования есть такое понятие "безопасный код", "ограничение на доступ к переменной, методу" и т.п. Вот как тут что-то подобное прикрутить???Метод никак не может быть вызван до того, как предыдущий вызов завершился. Вы неправильно понимаете, что происходит. Не делайте так Код: javascript 1. и все будет хорошо. Это вызов по какой-то причине вернул вам несколько строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 10:21 |
|
||
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
А как тогда в другой способ правильно получить текст выбранного элемента??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 14:18 |
|
||
|
Ограничение на одновременный вызов функции
|
|||
|---|---|---|---|
|
#18+
zalsilyА как тогда в другой способ правильно получить текст выбранного элемента??? Код: javascript 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2015, 15:03 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=39108615&tid=1445618]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 470ms |

| 0 / 0 |
