Предотвращение по умолчанию не работает

0

Я работаю над музыкальным проигрывателем, и я считаю, что предотвращение дефолта не работает. Когда я нажимаю игру, все работает нормально. Кнопка переключается на кнопку паузы, и музыка воспроизводится. Однако, когда я нажимаю паузу, страница обновляется. Есть идеи?

Благодарю!

play.on('click', function (e) {
    e.preventDefault();
    song.play();
    $(play).replaceWith('<a class="button gradient" id="pause" href="" title=""></a>');
    container.addClass('containerLarge');
    cover.addClass('coverLarge');

});

pause.on('click', function (e) {
    e.preventDefault();
container.removeClass('containerLarge');
    cover.removeClass('coverLarge');
    song.pause();
    $('#pause').replaceWith('<a class="button gradient" id="play" href="" title=""></a>');

});
Теги:
preventdefault

2 ответа

4
Лучший ответ

Вы заменяете элементы новыми. Обработчики событий привязаны к старым элементам, а не к новым, а ссылки, хранящиеся в play переменных и pause будут также старыми отдельными элементами DOM.

Вам нужно оставить только элементы и программно скрыть/показать их, а не полностью удалить их и заменить их другим элементом:

play.on('click', function (e) {
  e.preventDefault();
  play.hide();
  pause.show();
});
  • 2
    Или используйте для этого: $('body').on('click','#pause',function(e){
  • 0
    Хотя я дал ответ ниже, я не понимаю, зачем вам нужно было полностью удалять элементы DOM. Так что ответ @ Meagar лучше. Вы должны просто скрыть элементы, не удаляя их из DOM. Однако, если вам нужно удалить их и добавить обратно, добавьте слушателя к элементу body и посмотрите, где произошло событие.
Показать ещё 1 комментарий
1
$('body').on('click','#pause',function(e){
$('body').on('click','#play',function(e){

Вы не предоставили HTML, но они должны работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню