Вызов Jquery внутри / внутри Shadowbox

У меня есть простой Shadowbox, который вызывается с помощью jquery:

$('#statsButton').click(function() {
    thisContent = $('#userStats').html();
    Shadowbox.open({
        content: thisContent,
        player: "html"
    });
});

У меня есть div, в этом $('#userStats') объект, который должен предупреждать о клике:

$("#submitPosition").click(function(e) {
        alert('test');
});

Но когда я нажимаю, ничего не происходит. Обе вышеперечисленные функции обернуты в свои готовые блоки документов. Я звоню Shadowbox.init в начале сценария, и он прекрасно работает. Просто он игнорирует события jQuery внутри. Кто-нибудь может помочь?

Краткое резюме: в основном у меня есть Shadowbox и HTML-плеер. Я хочу, чтобы jQuery действовал так, как ожидалось в этом HTML-плеере

3 ответа

Решение

Если вы загружаете контент динамически в контейнер, вы должны использовать jQuery on() привязывать события к объектам внутри контента, потому что с помощью click() будет привязывать только событие к существующему #submitPosition,

Например:

$('body').on('click', '#submitPosition', function(e) {
   alert('test');
});

Кроме того, использование нескольких элементов на странице с одинаковым идентификатором не является хорошей практикой.

http://api.jquery.com/on/

Попробуй это:

$(document).ready(function(){    
    $("#submitPosition").live('click',function(e) {
            alert('test');
    });
});

Это поможет. Потому что, когда этот код инициализирует время, #submitPosition отсутствует в html. Но в прямом эфире решит эту проблему.

Я вижу 2 варианта:

1) В вашем userStat div измените на:

$("#submitPosition").click(function(e) {
    alert('test');
}).click();

который на самом деле вызовет вашу функцию обратного вызова.

2) Используйте событие onOpen shadowbox:

$('#statsButton').click(function() {
    thisContent = $('#userStats').html();
    Shadowbox.open({
        content: thisContent,
        player: "html",
        onOpen: function(){ alert('test'); } 
    });
});
Другие вопросы по тегам