Fancybox beforeLoad回调:Javascript,jQuery和引用$ this?

我不确定如何完成我想要做的事情,在开始时,它似乎很简单。 我想在将链接的内容调用到fancybox iframe之前,将'visited'类添加到点击的链接中。

Fancybox工作正常,只要我放弃beforeLoad调用。 添加后,页面只需重新加载窗口,绕过Fancybox。

我不确定我的beforeLoad函数(这里称为add_visited )是否允许使用jQuery(如在addClass ),或者我是否需要坚持直接的javaScriptfunction( element.setAttribute("className", "visited") )。 这里粘贴的代码是针对jQuery的,引用了在theClicked传递的theClicked

所以,正如你所看到的,我也不确定如何在函数中引用$(this) 。 基本上我想从实际的$.fancybox()调用中inheritancethis

并且,为了清楚起见, .clinical_trial_link是应用于锚点的类。 在实际代码中,它是a.clinical_trial_link

为了进一步说明,我在这里阅读了几个对话,讨论了这种标记链接访问方法的相对优点。 我只是简单地使用一个类,但是在一个像这个链接很重的网站上,看到已经被点击的内容是必要的。

最后,相关页面位于: http : //pull4parkinsonsfoundation.org/clinical_trials/

当然,js会从粘贴在这里的东西改变,因为我继续像一个带键盘的鲭鱼一样捶打。 😉

任何帮助将不胜感激,并提前感谢您在stackoverflow上所做的出色工作。 这是我多年来第一次发布问题!

这是我的代码:

 function add_visited(theclicked) { $(this).addClass('visited'); } $(document).ready(function() { $('.clinical_trial_link').fancybox({ 'beforeLoad': add_visited($this), 'maxWidth': 1222, 'maxHeight': 1222, 'fitToView': true, 'width': '80%', 'height': '90%', 'topRatio': 0.2, 'autoSize': false, 'closeClick': false, 'openEffect': 'elastic', 'closeEffect': 'elastic' }); }); 

如果你想要做的是将一个class添加到绑定到fancybox的选择器,请在任何fancybox回调中使用$(this.element)引用该元素

 $('.clinical_trial_link').fancybox({ 'beforeLoad': function(){ $(this.element).addClass("visited"); }, 'maxWidth': 1222, // other API options etc }); 

当你这样做:

 'beforeLoad': add_visited($(this)), 

$(this)成为函数的参数。 所以使用参数 – this在函数中没有上下文。

 function add_visited(theclicked) { $(theclicked).addClass('visited'); } 

或者,您也可以这样做:

 $('.clinical_trial_link').fancybox({ 'beforeLoad': function(){ $(this).addClass('visited'); }, 

有关详细信息,请参阅此文章 。