#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
Мой код большой, поэтому я буду держать его коротким. Я пытаюсь запустить событие onchange атрибута Select. Проблема в том, что когда я запускаю его, я получаю эту ошибку:
Uncaught TypeError: object is not a function
Поскольку мой код большой, я покажу вам коды, в которых я описываю событие onchange и когда я его запускаю.
Вот когда объявляется функция onchange:
function e(b, c) {
function a() {
if (b.current_modal) {
b.current_modal.className = "hide"
}
f("overlay").className = "hide"
}
jigsaw.UI.close_lightbox = a;
Util.$("overlay").click(a);
Util.$("set-parts").change(function () {
if (this.parts != 9) {
jsaw.set_image("images/puzzle.jpeg")
} else {
jsaw.set_image("images/puzzle1.jpeg")
}
c.emit(jigsaw.Events.PARTS_NUMBER_CHANGED, this.value);
c.emit(jigsaw.Events.RENDER_REQUEST)
});
Util.$("game-options").click("a", function (h) {
if (jigsaw.Events[this.id]) {
h.preventDefault();
c.emit(jigsaw.Events[this.id])
}
})
}
и вот когда я запускаю событие onchange:
show_time: function () {
/*.....*/
javascript: document.getElementById("date").innerHTML = ScoreResult;
document.getElementById("set-parts").selectedIndex = 1;
document.getElementById('set-parts').onchange();
}
Комментарии:
1. @Joe document.getElementById(‘set-parts’).onchange();
2. Если у вас есть jQuery, почему вы используете ванильный DOM?
3. Я пытаюсь запустить событие onchange с помощью JavaScript. Функция onChange работает, когда я изменяю атрибут select на веб-сайте (в HTML), но когда я хочу вызвать событие onchange с помощью JavaScript, я получил эту ошибку @Joe
4. Я пробовал это @Joe, но ничего не срабатывает…
5. Попробуйте вызвать onchange следующим образом: document.getElementById(‘set-parts’).dispatchEvent(новое событие (‘change’)); если ti сработает, я дам вам полный ответ о том, почему
Ответ №1:
Я не использую jquery, но в JavaScript есть разница в том, как работает addEventListener(eventName, …) и on*eventName* = function(){} .
Я полагаю, что не современная библиотека будет использовать интерфейс on * eventName * по одной простой причине: я могу содержать только одного слушателя. Но on * eventName * все еще существует для поддержки устаревшего кода.
Теперь, в вашем конкретном случае, когда вы добавляете событие, ваша библиотека использует интерфейс addEventListener / removeEventListener / dispatchEvent подчеркивания DOM. Это не приведет к настройке устаревшего свойства on * eventName * для вашего обратного вызова, поэтому единственный способ, которым вы можете напрямую вызвать его, отправив событие с помощью метода DOM dispatchEvent (или вашей библиотечной оболочки) с объектом события с типом ‘change’. Это то, что делает «новое событие (‘change’)». Если вам нужно передать дополнительные свойства событию, вы можете создать его следующим образом:
new Event('change', { foo : 1, bar : 'hello, world!' })
и эти свойства будут доступны в аргументах обратного вызова вашего слушателя [0] под любым именем, которое вы задали своему аргументу (в вашем случае вы оставили его пустым).