Ваш foo
определен внутри document).ready
- он не находится на верхнем уровне, поэтому, когда встроенный обработчик пытается найти для вызова глобальную функцию с именем Foo
, он не работает.
Либо положить Foo
снаружи:
function Foo() {
console.log('clicky click click');
document.getElementById('categoryBubble').style.display = 'none';
}
$( document ).ready(function() {
// ...
Или, что еще лучше, полностью избегайте встроенных обработчиков и правильно подключайте прослушиватель, используя вместо этого Javascript, что позволяет вам ссылаться на другие переменные и функции внутри текущей области видимости:
const span1 = $('<span></span>')
.prop({
id: 'categoryBubble',
title
})
.text(title);
const span2 = $('<span></span>')
.prop('class', 'xOut')
.on('click', Foo);
$('.multiSel').append(span, span2);
Также обратите внимание, что в современных версиях jQuery вместо $( document ).ready()
можно использовать
$(() => {
// code here
вместо этого. Кроме того, наличие нескольких идентификаторов в одном документе является недействительным HTML; добавление
<span id="categoryBubble"
несколько раз (если это возможно, учитывая другой код, который у вас может быть) будет недействительным. Попробуйте вместо этого использовать класс.
<span class="categoryBubble"
Если вы действительно хотите добавить диапазон несколько раз и хотите щелкнуть созданный диапазон, чтобы удалить categoryBubble
, связанный с этим диапазоном, тогда селектор идентификаторов работать не будет - вместо этого вы можете ссылаться на диапазон созданный ранее в замыкании, и скрыть его:
const span2 = $('<span></span>')
.prop('class', 'xOut')
.on('click', () => {
span1.hide();
});