【问题标题】:JQuery Variable Overwrite In Loop, Want To Retain Different ValuesJQuery 变量在循环中覆盖,想要保留不同的值
【发布时间】:2012-02-02 01:03:40
【问题描述】:

我正在创建一个视频库,并有 6 个缩略图,当点击这些缩略图时,将在页面上的 iframe 中播放相应的视频。

当用户转到下一页视频时,这 6 个缩略图会发生变化,加载存储在 XML 文档中的新链接。

var linkhtml=x[i].getElementsByTagName("linkhtml")[0].childNodes[0].nodeValue;

我遍历 XML 中的 6 个元素并更改缩略图 <td id="videoBox[1-6]">,如下所示:

$('#videoBox' + j).mousedown(function () {
    frames['videoPlayer'].playVideo(linkhtml, videoPlaylist);
});

但是,这不起作用,因为当我单击任何缩略图时,它会调用上次设置的 linkhtml,因此页面上的第 6 个视频。

如何让每个缩略图正确保留其链接?

【问题讨论】:

  • 这里没有足够的代码让任何人理解你目前在做什么。 x[i] 是指什么?据我所知,您总是将 linkhtml 设置为一个值,并且总是在 mousedown 中要求该值。您能否编辑此问题以包含所有相关代码的更完整列表?
  • 对不起,我知道这可能有点令人困惑。 @Guffa 得到了它并解决了它。谢谢你的时间瑞恩。

标签: javascript jquery variables loops


【解决方案1】:

使用匿名函数创建一个闭包,捕获当时变量的值:

(function(linkhtml){

  $('#videoBox' + j).mousedown(function () {
    frames['videoPlayer'].playVideo(linkhtml, videoPlaylist);
  });

})(linkhtml);

【讨论】:

  • 你先生,绝对是个天才。完美地工作,但是我不太了解它(jquery语法明智)所以我有一些阅读要做。非常感谢Guffa:D
  • 一个快速的问题:在切换视频页面时,在加载新页面之前清除此问题的最佳方法是什么?简单地做 mousedown(function(){});似乎没有成功
  • @DougieBear:jQuery 可以处理多个事件处理程序,因此绑定另一个事件不会替换前一个事件(就像直接使用 DOM 事件时一样)。使用unbind 方法删除事件绑定。
  • 对于以后看到这篇文章的任何人,我把:$('#videoBox' + j + 'td').unbind('mousedown', this.onMouseDown); per Guffa 的建议放在函数上方,它就成功了。再次感谢。
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多