Клонирование обработчиков событий
Доброго всем времени суток!
Есть такая ситуация. На странице есть несколько селектов. К ним при создании страница по средствам 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, время: 02:08. |