2015-07-02 2 views
0

JQuery Valhooks либо ограничены в своей применимости, либо они плохо документированы.JQuery valHooks: выберите по атрибуту?

Я использовал valhooks, установив значение типа на ВЫБ.2 элемента (Выбор2 является причудливым способом обработки выберите списки):

$("#mySelect").select2(); 
$("#mySelect").select2('container')[0].type='select2Marker'; 

$.valHooks['select2Marker'] = { 
    get: function (el) { 
     alert("hello there"); 
    }, 
} 

Проблема заключается в том, если я вызвать изменение в списке ВЫБ.2, то тип атрибута уничтожается.

$("#mySelect").select2().trigger("change"); 

Я полагал, что я мог бы решить эту проблему, поставив специальный класс или даже пользовательские «данные-select2type» атрибут на моем выберите тег, но я не могу понять, как определить valhooks выбрать с помощью атрибута или класса , Например,

$.valHooks[".my-class"] = {...} 

не работает, когда я пытаюсь добавить класс «мой класс» в свой список выбора. Это возможно? Какими способами valHooks можно привязать к узлу?

+0

Должно ли 'select2Val' быть' select2Marker'? Функция 'get:' должна что-то вернуть. – Barmar

+0

Упс-спасибо, я исправлю это сейчас. функция Get действительно должна что-то возвращать, но она также должна делать ее внутри, независимо от существования возврата, а это не – IcedDante

+0

'valHooks' не смотрит на пользовательские атрибуты. Код: 'hooks = jQuery.valHooks [elem.type] || jQuery.valHooks [elem.nodeName.toLowerCase()]; ' – Barmar

ответ

0

valHooks может быть присоединен только к типу ввода или имени узла. Поскольку пользовательские типы не прикрепляются к элементам без ввода, присоедините крючок к имени узла. Затем проверьте, есть ли у него класс, который вы хотите настроить.

$.valHooks['div'] = { 
    get: function(el) { 
     if ($(el).hasClass("myClass")) 
      alert("hello there"); 
      return ...; 
     }, 
    set: ... 
}; 
+0

Barmar, я пытаюсь установить свойство «type» на элементе dom, а не на атрибуте на узле .. и я могу сделать это успешно до тех пор, пока триггер изменения – IcedDante

+0

да, это не сработает, потому что jQuery использует ' elem.type', а не 'elem.getAttribute ('type')'. – Barmar

+0

Проблема состоит в том, что элементы '' могут иметь свойство 'type'. – Barmar

Смежные вопросы