У меня есть select[multiple]
, который я дал класс custom-multiselect
на моей странице, для которой я уловивший DOMSubtreeModified
событие следующим образом:Реализация MutationObserver вместо DOMSubtreeModified
HTML:
<select class="custom-multiselect"></select>
JQuery:
$('.custom-multiselect').each(function (i, select) {
var sel = this;
adjustHeight(sel); //Custom function
//Binding DOMSubtreeModified to catch if the select list gets modified by the user
$(sel).on('DOMSubtreeModified', function() {
adjustHeight(sel);
});
//For Internet Explorer
$(sel).on('propertychange', function() {
adjustHeight(sel);
});
});
Этот подход работает безупречно. Я хочу преобразовать функцию DOMSubtreeModified
в MutationObserver
, так как DOMSubtreeModified
амортизируется.
Так что я сделал что-то вроде этого:
var observer = new MutationObserver(function (mutation) {
mutation.forEach(function (m) {
if (m.type == 'subtree') {
adjustHeight(this);//Can I use m.target here?
}
});
});
observer.observe(document.querySelector('select.custom-multiselect'), {
subtree: true
});
Но я в конечном итоге получить ошибки
TypeError: The expression cannot be converted to return the specified type.
Как я могу конвертировать мой DOMSubtreeModified
событие наблюдается в MutationObserver
?
'this' в' adjustHeight' наверняка не будет, что вы хотите - пытались ли вы м. цель? –
Я сделал, но я получаю вышеупомянутую ошибку, это не дает мне знать, работает ли m.target или нет: -S – progrAmmar
ОК, прочитайте [документацию] (https://developer.mozilla.org/en/docs/Web/API/MutationObserver # MutationObserverInit) - ** По крайней мере, childList, атрибуты или characterData должны быть установлены в true. В противном случае «была указана недопустимая или недопустимая строка» ошибка выбрана ** - также нет мутации '.type ==« поддерево »' - я удивлен, что ваш код добирается настолько, насколько вы утверждаете, - о, я вижу, эта ошибка связана с тем, что вы не установили хотя бы один из 'childList',' attributes' или 'characterData' в true ... –