我在这个页面上工作,我正在使用Jquery Mp3播放器(Jplayer)及其播放列表。我想要做的事情在理论上非常简单:我想记录每个播放列表元素的点击次数。
Jplayer具有此功能,每次加载新的播放列表元素时都会加载:function playListChange( index )
其中每个元素都有自己动态更新的ID:myPlayList[index].song_id
这是我的代码:
function playListChange( index ) {
var id = myPlayList[index].song_id;
if(!o) { var o = {}; }
if(!o[id]) { o[id] = 0; }
alert(o[id]);
… $("#mydiv").click { o[id] = o[id]+1; } …
但每次重置o [id]并且警报始终显示0.为什么?
感谢您的回复。
答案 0 :(得分:1)
问题是变量o
的范围。如果使用var
函数定义它,它将仅存在于函数的一次调用中。试试
function playListChange( index ) {
var id = myPlayList[index].song_id;
if(!window.o) { window.o = {}; }
if(!window.o[id]) { window.o[id] = 0; }
alert(window.o[id]);
… $("#mydiv").click { window.o[id] = window.o[id]+1; } …
这应该强制它进入全局范围(window
的属性,客户端JavaScript中的全局调用对象),它应该可以工作。
编辑:我认为这种使变量成为window
属性的明确方法是最安全的。
有an excellent explanatory article on scope in JavaScript here。
答案 1 :(得分:1)
这里的第一个答案部分是正确的,但我不认为他的建议有效。问题肯定是变量范围,但只是删除var命令不会将变量推送到全局范围(如果它不存在)。您需要将var o = {};
放在playListChange函数之外。像这样:
var o = {};
function playListChange( index ) {
var id = myPlayList[index].song_id;
if(!o[id]) { o[id] = 0; }
alert(o[id]);
$("#mydiv").click { ++o[id]; }
}