我在我的网站上开发了一个非常基本的音频播放器,类似于SoundClouds。
我已成功完成它,我开始清理所有标记,包括(尝试)删除所有内联事件处理程序(即:onclick=""
或onkeyup=""
)< /强>
但是,我在执行此操作时遇到了一些问题。
这有点难以解释所以我将发布我的JavaScript,然后让你知道问题是什么:
$(".track-w__trigger").click(function(){
var tid = $(this).attr('aria-trackid'); // aria-trackid is equal to a random integer created by PHP
var tiW = 'w' + tid + 'w'; // this is an object (i.e: w3w)
playPauseButton(this, tiW, ti);
});
function playPauseButton(button, wave, trackID){
var button = $(button);
if(wave.isPlaying()){ // the object (w3w.isPlaying())
button.removeClass("playing");
wave.pause();
} else {
button.addClass("playing");
wave.play();
}
}
我曾经拥有的是
<div class="track-w__trigger" onclick="playPauseButton(this, w3w, 3)" id="w3w-trigger"></div>
现在是:
<div class="track-w__trigger" aria-trackid="3" id="w3w-trigger"></div>
正如您在第二段代码中看到的那样。 w3w
是一个对象。但是,因为我使用click
函数在单独的script
中使用字符串引号来设置它。 JavaScript 已经成为string
。
所以现在我以wave.isPlaying()
为例;它什么都不做。
我不知道如何解决这个问题,谷歌的任何结果都无法帮助我。任何帮助解决这个问题将不胜感激,
谢谢!
编辑:
这就是&amp;如何设置w3w
:
var w3w = Uki.start({
// e.t.c
});
答案 0 :(得分:1)
答案 1 :(得分:0)
不要将每个对象作为单独的变量,而是创建一个对象,该对象包含代表wNw中N的id的每个对象。例如:
var wNw = {};
// represents w1w
wNw[1] = (Uki.start({
// e.t.c
}));
// represents w17w
wNw[17] = (Uki.start({
// e.t.c
}));
// represents w3w
wNw[3] = (Uki.start({
// e.t.c
}));
这为您提供了一个看起来像这样的对象:
{
1: object_that_was_w1w
17: object_that_was_w17w
3: object_that_was_w13w
}
然后你的点击处理程序如下所示:
$(".track-w__trigger").click(function(){
var tid = $(this).attr('aria-trackid'); // aria-trackid is equal to an integer of 1 to 5
var tidNum = parseInt(tid);
playPauseButton(this, wNw[tidNum], ti);
});
答案 2 :(得分:0)
您可以尝试这样的事情,
var tid='w'+5+'w';
var tryout=tid.valueOf();
console.log("getting the object "+tryout)
valueOf属性将字符串转换为对象