将JQuery重用于多个HTML元素

时间:2016-04-05 09:05:38

标签: jquery race-condition

这里有新的开发者。

我在页面上有多个由同一个JQuery生成的元素。每个元素都加载了与之关联的适当内容,但任何函数 - 在这种情况下点击不同的轨道 - 从最后一组中提取内容。

到目前为止,我的研究让我相信这是种族条件的一个例子。

这是一个码本 - 点击左侧两个播放器上的任何歌曲标题,以查看图像,歌曲标题,艺术家姓名和.mp3数据是如何从#player-3中提取的。

$("#player-2").jAudio({
    playlist: [{
            file: "http://spindrop.io/audio/forgetme.mp3",
            thumb: "http://spindrop.io/images/ar.jpg",
            trackName: "Hungry",
            trackArtist: "American Royalty",
            trackAlbum: "Prismatic EP",
    }, {
            file: "http://spindrop.io/audio/mistakes.mp3",
            thumb: "http://spindrop.io/images/ar.jpg",
            trackName: "Red",
            trackArtist: "American Royalty",
            trackAlbum: "Prismatic EP",
    }, {
            file: "http://spindrop.io/audio/riverbed.mp3",
            thumb: "http://spindrop.io/images/ar.jpg",
            trackName: "Lifeline",
            trackArtist: "American Royalty",
            trackAlbum: "Prismatic EP",
    }]
});
$("#player-3").jAudio({
    playlist: [{
            file: "../audio/staticheart.mp3",
            thumb: "../images/geo.jpg",
            trackName: "Family",
            trackArtist: "Geographer",
            trackAlbum: "Animal Shapes",
    }, {
            file: "../audio/taillights.mp3",
            thumb: "../images/geo.jpg",
            trackName: "Looping",
            trackArtist: "Geographer",
            trackAlbum: "Animal Shapes",
    }, {
            file: "../audio/theline.mp3",
            thumb: "../images/geo.jpg",
            trackName: "Sonic",
            trackArtist: "Geographer",
            trackAlbum: "Animal Shapes",
    }]
});

http://codepen.io/kylebillings/pen/BKmZJx

&安培;这是指向jquery的非缩小版本的链接:https://gist.github.com/hisasann/337283

提前非常感谢。我很感谢学到一两件事。

1 个答案:

答案 0 :(得分:0)

好的,我发现了你的错误(即使你要求其他人调试你的代码时,缩小版本不是最好的方法)。

错误在线:

this.settings = t.extend(!0, r, a)

a包含提供的Playlist,而r包含默认参数。我不确定原因,但是如果您在此行之后记录settings变量,则会看到所有设置对象都具有相同的播放列表。

可能的修复:

  1. 交换ar

    this.settings = t.extend(!0, a, r)
    

    来自jQuery doc:

      

    默认情况下,$ .extend()执行的合并不是递归的。如果第一个对象的属性本身就是一个对象或数组,它将被第二个或后续对象中具有相同键的属性完全覆盖。

  2. 使用{}代替!0(即假) 对于这个,我仍然试图理解。它与我猜想的recursive合并有关,以及在控制台中它返回一个函数而不是一个对象的事实。我一发现就会编辑。