Клонирование обработчиков событий
Доброго всем времени суток!
Есть такая ситуация. На странице есть несколько селектов. К ним при создании страница по средствам jQuery привязывается обработчик событий if (typeof($("select"))==="object") { $("select").bind('change', validateText); } Но потом происходит инициализация всех селектов, как кастомизированных списков с помощью собственного плагина. А плагин этот селект уничтожает в принципе и вместо него рисует блоки, списки и прочую ерунду, а значение хранит в спрятанном интупе. Вот возник у меня вопрос: можно ли как-то считать, какие обработчики событий привязаны к объекту и продублировать их на новый объект? Заранее благодарю за любой ответ! |
Цитата:
Кроме того: bind() устарел. Юзай on(). Кроме того typeof - не функция, а языковая конструкция, так что скобки не нужны. Если бы кастомизатор селектов не удалял нативный селект - все бы работало само собой. А так - инициализируй кастомизатор раньше, затем навешивай обработчики не на нативный select, а на кастомный или хз че там у тя за плагин и как работает. |
А вобще все проще - выкинь нахер этот кастомизатор.
Из моего опыта - заказчик почти всегда соглашается с моими доводами что кастомный селект - зло и отказывается от него. |
Цитата:
Ну да мне и пофигу. То, что можно вешать обработчик уже на собственный селект, это понятно. Я так вопрос сейчас и решил, но мне стало интересно, возможно ли клонирование/копирование вообще. В принципе, как механизм. Может ведь и пригодиться. |
Цитата:
|
NapalmRain,
неназначайте 'change' селекту а дополните функциональность вашего кастомизатора |
Цитата:
|
Цитата:
|
Цитата:
Но вопрос я задал с целью узнать, возможно ли автоматическое считывание повешенных обработчиков, для более динамического и гибкого использования кастомизатора. Что просто провёл инициалицацию, а плагин в свою очередь считал, какие обработчики были повешены на селект и повесил их на новый созданный объект. |
Селект сохранение 'change' для кастомизированного селекта
NapalmRain,
хватило бы опции {'change' : validateText} при кастомизации но если хочется поизвращаться и 'changeHandler' был один то можно так <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>selectmenu demo</title> <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css"> <style> label { display: block; } select { width: 200px; } .overflow { height: 200px; } </style> <script src="http://code.jquery.com/jquery-1.10.2.js"></script> <script src="http://code.jquery.com/ui/1.11.2/jquery-ui.js"></script> </head> <body> <label for="number">Select a number:</label> <select name="number" id="number"> <option value="1">1</option> <option value="2" selected>2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> </select> <script> function validateText() { alert(this.value) } $("select").on('change', validateText); var sel = $( "#number" ) ; sel.selectmenu({change: $._data(sel[0], 'events')['change'][0]['handler']}) .selectmenu( "menuWidget" ) .addClass( "overflow" ); </script> </body> </html> |
Часовой пояс GMT +3, время: 22:56. |