Jquery点击次数记录

时间:2010-06-05 14:09:20

标签: jquery

我在这个页面上工作,我正在使用Jquery Mp3播放器(Jplayer)及其播放列表。我想要做的事情在理论上非常简单:我想记录每个播放列表元素的点击次数。

  • 当有人进入该页面时,每个元素的点击次数均为0。
  • 访问者可以在元素#1上单击几次,然后转到元素#2(将为0),然后返回到元素#1并且必须保存单击次数。
  • 我们无需将其保存以供下次访问。

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.为什么?

感谢您的回复。

2 个答案:

答案 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]; }
}