|
|
|
js select - исключить каскадные события для onchange
|
|||
|---|---|---|---|
|
#18+
На форме есть несколько выпадающих списков. При выборе значения в одном из списков содержимое следующего списка обновляется в зависимости от выбранного значения. Например, если в списке A выбрано значение A1, то в списке B доступны значения B1, B2. Если в списке A выбрано значение A2, то в списке B доступны значения B3, B4. У всех списков в onchange задан один и тот же обработчик, onchange="item_change(this)". В документации указано, что onchange срабатывает при интерактивных пользовательских действиях. Но по факту оказывается, что событие каскадно срабатывает в том числе и тогда, когда в обработчике меняется selectedIndex. Как можно исключить каскадное срабатывание обработчика? Я пока делаю так: Код: javascript 1. 2. 3. 4. 5. 6. 7. Но мне кажется, что должен быть более "нативный" способ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2020, 10:05 |
|
||
|
js select - исключить каскадные события для onchange
|
|||
|---|---|---|---|
|
#18+
Alibek B. , вместо такого долгого объяснения лучше бы сделал тестовый пример... На нем было бы понятно, что у тебя происходит и не делать пример самому, чтобы что-то показать тебе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2020, 12:26 |
|
||
|
js select - исключить каскадные события для onchange
|
|||
|---|---|---|---|
|
#18+
Как-то так: https://jsfiddle.net/n85d62pL/ (в jsfiddle атрибут onchange почему-то не работает, продублировал его через addEventListener). Но тут почему-то каскадного срабатывания события не наблюдаю (при задании selectedIndex событие change не срабатывает). Код в примере упрощен, но идентичен моему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2020, 14:27 |
|
||
|
js select - исключить каскадные события для onchange
|
|||
|---|---|---|---|
|
#18+
Каскадного срабатывания событий добиться не получается, видимо у меня какая-то малозаметная ошибка была. Но какая-то странность все равно остается. Сделать пример на jsfiddle не получается, там почему-то игнорируются атрибуты onchange. Но можно сохранить в HTML приложенный код и открыть его в браузере. Код: plaintext 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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. Пример странности: 1. Выбираем тип ФЛ. 2. Выбираем группу, тариф и вариант. 3. По выбранному тарифу выводится подробная информация. 4. Выбираем тип ИП. При смене типа список с группами тарифов обнуляется (поскольку в кеше нет соответствующих тарифов). Но списки с тарифами и вариантами почему-то остаются без изменений, несмотря на выполняемый .options.length = 0. Не могу понять, почему так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2020, 22:11 |
|
||
|
js select - исключить каскадные события для onchange
|
|||
|---|---|---|---|
|
#18+
Нашел причину. Нужно было обнулять выбранные тарифы при смене типа и до вызова tariff_load. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2020, 22:42 |
|
||
|
js select - исключить каскадные события для onchange
|
|||
|---|---|---|---|
|
#18+
Alibek B. , так ты решил свою проблемку? Я бы не стал для таких целей использовать единый обработчик события... Т.к., все равно, придется узнавать на каком элементе произошло событие... И действия будут явно разные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2020, 07:35 |
|
||
|
js select - исключить каскадные события для onchange
|
|||
|---|---|---|---|
|
#18+
Да, переписал заново, теперь работает правильно. До этого обработчик вызывался каскадно, уж не знаю почему. Элементы разные, но обработка однотипна - при изменении данных сбросить значения следующих полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2020, 07:39 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=39931471&tid=1443526]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 145ms |

| 0 / 0 |
