Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.11.2014, 12:33
Аспирант
Отправить личное сообщение для NapalmRain Посмотреть профиль Найти все сообщения от NapalmRain
 
Регистрация: 17.03.2014
Сообщений: 40

Клонирование обработчиков событий
Доброго всем времени суток!
Есть такая ситуация. На странице есть несколько селектов.
К ним при создании страница по средствам jQuery привязывается обработчик событий
if (typeof($("select"))==="object") {
			$("select").bind('change', validateText);
		}

Но потом происходит инициализация всех селектов, как кастомизированных списков с помощью собственного плагина. А плагин этот селект уничтожает в принципе и вместо него рисует блоки, списки и прочую ерунду, а значение хранит в спрятанном интупе.
Вот возник у меня вопрос: можно ли как-то считать, какие обработчики событий привязаны к объекту и продублировать их на новый объект?

Заранее благодарю за любой ответ!
Ответить с цитированием
  #2 (permalink)  
Старый 14.11.2014, 12:43
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от NapalmRain
(typeof($("select"))==="object")
Бессмысленная проверка. Всегда будет true. Тут вообще не нужна проверка. Если селектов не найдется - bind просто отработает в холостую.
Кроме того: bind() устарел. Юзай on(). Кроме того typeof - не функция, а языковая конструкция, так что скобки не нужны.

Если бы кастомизатор селектов не удалял нативный селект - все бы работало само собой. А так - инициализируй кастомизатор раньше, затем навешивай обработчики не на нативный select, а на кастомный или хз че там у тя за плагин и как работает.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 14.11.2014, 12:44
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А вобще все проще - выкинь нахер этот кастомизатор.
Из моего опыта - заказчик почти всегда соглашается с моими доводами что кастомный селект - зло и отказывается от него.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 14.11.2014, 12:52
Аспирант
Отправить личное сообщение для NapalmRain Посмотреть профиль Найти все сообщения от NapalmRain
 
Регистрация: 17.03.2014
Сообщений: 40

Сообщение от danik.js Посмотреть сообщение
А вобще все проще - выкинь нахер этот кастомизатор.
Из моего опыта - заказчик почти всегда соглашается с моими доводами что кастомный селект - зло и отказывается от него.
Видимо тебе больше повезло, ибо мне сказано: "Сделай как на шаблоне и не волнует". Доводы слушать отказываются.
Ну да мне и пофигу.
То, что можно вешать обработчик уже на собственный селект, это понятно. Я так вопрос сейчас и решил, но мне стало интересно, возможно ли клонирование/копирование вообще. В принципе, как механизм. Может ведь и пригодиться.
Ответить с цитированием
  #5 (permalink)  
Старый 14.11.2014, 12:55
Аспирант
Отправить личное сообщение для NapalmRain Посмотреть профиль Найти все сообщения от NapalmRain
 
Регистрация: 17.03.2014
Сообщений: 40

Сообщение от danik.js Посмотреть сообщение
Бессмысленная проверка. Всегда будет true. Тут вообще не нужна проверка. Если селектов не найдется - bind просто отработает в холостую.
Кроме того: bind() устарел. Юзай on(). Кроме того typeof - не функция, а языковая конструкция, так что скобки не нужны.
Вот честно, про то, что bind устарел, не знал. За информацию благодарю. А то, что typeof не функция я понимаю, но скобки пишу исключительно для красоты, не более того.
Ответить с цитированием
  #6 (permalink)  
Старый 14.11.2014, 13:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

NapalmRain,
неназначайте 'change' селекту а дополните функциональность вашего кастомизатора
Ответить с цитированием
  #7 (permalink)  
Старый 14.11.2014, 13:26
Аспирант
Отправить личное сообщение для NapalmRain Посмотреть профиль Найти все сообщения от NapalmRain
 
Регистрация: 17.03.2014
Сообщений: 40

Сообщение от рони Посмотреть сообщение
NapalmRain,
неназначайте 'change' селекту а дополните функциональность вашего кастомизатора
Так в этом и стоит вопрос. возможно ли, и если возможно, то Как?
Ответить с цитированием
  #8 (permalink)  
Старый 14.11.2014, 14:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от NapalmRain
значение хранит в спрятанном интупе
если ваш кастомизатор работает то и меняйте это значение что ещё нужно то?
Ответить с цитированием
  #9 (permalink)  
Старый 14.11.2014, 14:41
Аспирант
Отправить личное сообщение для NapalmRain Посмотреть профиль Найти все сообщения от NapalmRain
 
Регистрация: 17.03.2014
Сообщений: 40

Сообщение от рони Посмотреть сообщение
если ваш кастомизатор работает то и меняйте это значение что ещё нужно то?
Собственно, сейчас я так и делаю.
Но вопрос я задал с целью узнать, возможно ли автоматическое считывание повешенных обработчиков, для более динамического и гибкого использования кастомизатора. Что просто провёл инициалицацию, а плагин в свою очередь считал, какие обработчики были повешены на селект и повесил их на новый созданный объект.
Ответить с цитированием
  #10 (permalink)  
Старый 14.11.2014, 15:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Селект сохранение '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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить список обработчиков событий Logo Events/DOM/Window 8 13.02.2015 22:57
Помогите в замыкании универсальной функции для обработчиков событий addEventListener iis_ Events/DOM/Window 6 30.01.2014 01:09
Ползунок JQuery: несколько событий? Veterinar jQuery 9 10.01.2014 20:57
Где лучше вешать обработчики событий? BETEPAH Events/DOM/Window 5 26.12.2013 21:40
Скопировать обработчики событий с одного элемента на другой. Jurasmi Events/DOM/Window 3 10.11.2010 19:03