javascript - 调用一次的 JavaScript 代码不会第二次执行
问题描述
我不认为这是合适的标题,但我会在这里更好地解释。我有一个点击事件正在发生,该事件在页面底部显示一个粘性页脚。在那里您可以看到一个 HTML5 音频播放器和一个关闭按钮。当我单击关闭按钮时,什么也没有发生。浏览器控制台中没有错误。看一下代码:
$(document).ready(function(e) {
$(".playButton").click(function() {
// Get the value of the button
var val = $(this).val();
// Paste the audio player
$('#audioContainerBottom').html(show_audio_player(val));
$('#navbarBottomFixed').show();
audio_path = 'https://www.website.com/uploads/files/' + val;
audio_core = $('#audio_core').attr('src', audio_path)[0];
audio_core.play();
$(this).hide();
$(".stopButton").show();
});
$(".stopButton").click(function() {
var val = $(this).val();
$('#navbarBottomFixed').hide();
audio_path = 'https://www.website.com/uploads/files/' + val;
audio_core = $('#audio_core').attr('src', audio_path)[0];
audio_core.stop;
$(".stopButton").hide();
$(".playButton").show();
});
$(".closeBottomSidebar").click(function(e) {
$('#navbarBottomFixed').hide();
alert('Closed!');
});
});
function show_audio_player(audio) {
var src = 'https://www.website.com/uploads/files/' + audio;
audio = '<div class="col-md-10 col-xs-10"><audio controls id="audio_core"> ' +
'<source id="audio_source_id" autoplay src="' + src + '" type="audio/mpeg">' +
'Your browser does not support the audio element.' +
'</audio></div>' +
'<div class="col-md-2 col-xs-2">' +
'<button class="btn btn-danger" id="closeBottomSidebar">' +
'<i class="fa fa-remove"></i> Close </button></div>';
return audio;
}
.stopButton {
display: none;
}
#playerContainer {
display: none;
}
#navbarBottomFixed {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<div id="navbarBottomFixed" class="navbar navbar-default navbar-fixed-bottom">
<div class="container" id="audioContainerBottom">
</div>
</div>
解决方案
关闭按钮由show_audio_player
函数动态创建。它在页面加载时不存在。
所以这里的点击处理程序:
$(".closeBottomSidebar").click(function(e) {
$('#navbarBottomFixed').hide();
alert('Closed!');
});
未注册,因为不$(".closeBottomSidebar")
返回任何元素。
解决方案是使用委托:
$("#audioContainerBottom").on("click",".closeBottomSidebar",function(e) {
$('#navbarBottomFixed').hide();
alert('Closed!');
});
因此,单击处理程序附加到#audioContainerBottom
事件并将其委托给它是否在事件发生.closeBottomSidebar
时存在......即使它在页面加载时不存在。
推荐阅读
- javascript - 使用 google-maps-react 绘制多个多边形
- vue.js - 如何从 nuxt 中的嵌套路由访问 id
- sql-server - SQL Server - 通过备份服务器
- blockchain - Corda:出现错误 - CollectSignaturesFlow 的发起者必须准确传递签署交易所需的会话
- swift - 过滤数组时性能迅速下降
- apache-kafka - 屏蔽kafka连接器的日志
- c - 如何使用条件和循环来模拟 Monty Hall 问题?
- assembly - MIPs 程序集中数组的最大值
- php - Wp add_shortcode 属性不改变属性值
- google-apps-script - 谷歌脚本:我们如何使用脚本提取标签的超链接,在您的 Google 表格公式栏上看不到它的 URL?