Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过包含无效字符串的变量设置对象_Javascript_Jquery_Html - Fatal编程技术网

Javascript 通过包含无效字符串的变量设置对象

Javascript 通过包含无效字符串的变量设置对象,javascript,jquery,html,Javascript,Jquery,Html,我在我的网站上开发了一个非常基本的音频播放器,类似于SoundClouds 我成功地完成了它,并开始清理所有标记,包括(尝试)删除所有内联事件处理程序(即:onclick=“”或onkeyup=“”)) 然而,在执行此操作时,我在JavaScript中遇到了一些问题 这有点难以解释,因此我将发布我的JavaScript,然后让您了解问题所在: $(".track-w__trigger").click(function(){ var tid = $(this).attr('aria-tra

我在我的网站上开发了一个非常基本的音频播放器,类似于SoundClouds

我成功地完成了它,并开始清理所有标记,包括(尝试)删除所有内联事件处理程序(即:
onclick=“”
onkeyup=“”

然而,在执行此操作时,我在JavaScript中遇到了一些问题

这有点难以解释,因此我将发布我的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>

不要将每个对象作为一个单独的变量,而是创建一个对象,该对象在表示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);
});

你可以试试这样的

var tid='w'+5+'w';
var tryout=tid.valueOf();
log(“获取对象”+试用)
使用eval
wave=eval(wave)
将字符串作为函数计算

或者用更安全的方法

wave = window[wave];

什么是
w3w
?“设定在哪里?”ParthTrivedi等一下,编辑我的code@ParthTrivedi编辑!你把它放在这里当作一根绳子,是吗?变量tiW='w'+ti+'w';ti变量是什么?它会改变吗dynamically@GraveyardQueen是的,但因为它有引号,它不再是一个对象。如果我执行
var tiW=w+ti+w
,它会给我一个错误。不幸的是,这不起作用:/PHP会在页面向下滚动时生成这些数字(使整数5增加)。我已经对我帖子中的评论进行了编辑。Sorryeval非常气馁。@Joe为什么?
$(".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);
});
wave = window[wave];