Добрый вечер, все, здесь я снова с очень конкретным вопросом, на который я не мог найти ответа. Рассмотрите следующую ситуацию: У меня есть объект jQuery, $wrapper = $(this);
. Это происходит при вызове init, например, $('#unique-wrapper-id').initWrapper()'
. Как вы уже представляете, initWrapper()
является функцией в jQuery.fn
.jQuery добавить метод к объекту, затем вызвать событие на нем
Теперь, по-прежнему в initWrapper()
вызова добавить функцию $wrapper
как этот
$wrapper.getValue = function() { /* typical wrapper function */}
, а затем, в функции обратного вызова, который выполняется при нажатии на элемент внутри обертки я называю $wrapper.trigger('change')
. С другой стороны, я слушаю обычное событие изменения jQuery и здесь, где он больше не работает.
$('#unique-wrapper-id').change(function() {
var $wrapper = $(this);
$wrapper.getValue(); // $wrapper.getValue() is not a function
});
Итак, где-то в процессе проведения изменений JQuery getValue()
теряется. Нет проблем, я не буду просто прикрепить его к самому DOMElement в вызове инициализации с
$wrapper[0].getValue = function { /* typical wrapper function */ }
Это работает, как ожидалось, и я могу выполнить метод getValue()
на DOMElement позади объекта JQuery на конце прослушивания.
Однако, есть две вещи, которые меня ошибка:
- Почему
getValue()
на объект JQuery теряться в процессе проведения изменений? - Почему конструктор jQuery (
var $wrapper = $(this);
) не копирует функцию DOMElementgetValue()
в объект jQuery?
Спасибо заранее, если запрошенный я попытаюсь сделать jsfiddle (или что-то проще, применимый JQuery, я просто не могу jsfiddle работать, как ожидалось -.-)
Каждый раз, когда вы звоните '$ (элемент)' это Ĉ создает новый ** объект jQuery, который обертывает элемент DOM. Таким образом, свойства, добавленные в исходный объект jQuery, теряются. – Barmar
@Barmar Хорошая точка. Если '$ wrapper':' $ ('# unique-wrapper-id') 'определяется перед' .change() 'событием, должен иметь возможность использовать' $ wrapper' внутри обработчика, не вызывая 'jQuery()' снова. Также может быть настроено на делегирование событий '$ (document) .on (" change ", '# unique-wrapper-id')' или '$ wrapper.change (handler)' then '$ (this) .data(). getValue() 'внутри' handler' – guest271314
Да, вы можете это сделать. Но он не масштабируется для нескольких элементов. – Barmar