Javascript 为什么单击jQuery事件后mp3url变量不起作用
我想在jqueryclick事件之外显示“mp3Url”变量。实际上,从下面的代码片段中是否有可能?我看了很多文章,但不起作用Javascript 为什么单击jQuery事件后mp3url变量不起作用,javascript,jquery,audio-player,Javascript,Jquery,Audio Player,我想在jqueryclick事件之外显示“mp3Url”变量。实际上,从下面的代码片段中是否有可能?我看了很多文章,但不起作用 <script> var mp3Url; // NOW I CLICK album-poster TO GET CURRENT SONG ID $(".album-poster").on('click', function(e){ mp3Url = $(this).attr('data-mp3'); });
<script>
var mp3Url;
// NOW I CLICK album-poster TO GET CURRENT SONG ID
$(".album-poster").on('click', function(e){
mp3Url = $(this).attr('data-mp3');
});
//console.log( mp3Url );
const ap = new APlayer({
container: document.getElementById('aplayer'),
listFolded: true,
audio: [
{
name: 'Invisible Beauty',
artist: 'Artist',
url: mp3Url, // Here is the variable
cover: 'photo.jpg'
},
]
});
</script>
var-mp3Url;
//现在,我单击专辑海报以获取当前歌曲ID
$(“.album poster”)。在('click',函数(e){
mp3Url=$(this.attr('data-mp3');
});
//console.log(mp3Url);
const ap=新的APlayer({
容器:document.getElementById('aplayer'),
李斯特:是的,
音频:[
{
名称:"看不见的美",,
艺术家:“艺术家”,
url:mp3Url,//这是变量
封面:'photo.jpg'
},
]
});
这取决于您想何时显示它。在当前表单中,脚本执行三件事
1. Declare mp3Url variable (no value assigned)
2. Create and register a function to be execute whenever album poster is clicked.
a. Assign a value to the variable above (whenever the poster is clicked).
3. Print value of the above variable to console.
在步骤2中,您刚刚创建了一个函数,并“注册”了它,以便在将来响应某个事件时执行。当执行步骤3时,mp3Url
变量仍将具有undefined
值,因为浏览器将立即同时运行步骤1、2、3,而不给用户单击任何内容的机会。稍后,每当用户单击海报时,将执行2系列中的子步骤
如果希望在“用户单击海报”时打印值,只需将console语句移动到事件处理程序函数中即可。这是必需的,因为浏览器只会在用户操作时运行事件处理程序内部编写的代码
PS:您可以在事件处理程序中移动变量。在声明APlayer not的上下文中不存在mp3Url之前,尝试此操作
var ap;
$(".album-poster").on('click', function(e){
var mp3Url = $(this).attr('data-mp3');
ap = new APlayer({
container: document.getElementById('aplayer'),
listFolded: true,
audio: [
{
name: 'Invisible Beauty',
artist: 'Artist',
url: mp3Url, // Here is the variable
cover: 'photo.jpg'
},
]
});
});
此函数的内部控制台正在工作,但我需要事件函数的外部。在单击按钮之前,它不会有值。为什么您需要事件之外的值?您可能需要在事件内部执行其他代码/调用函数。仅在事件内部调用函数,但在事件外部调用函数时显示函数未定义。请给我举个例子好吗?鉴于原始问题和代码可以回答问题,评论不是为了问更多的问题。如果你想完成更多的任务,我建议你提出一个新问题,发布更多代码,说出你真正想完成的任务。请检查这个问题。我已经添加了完整的代码。