如何在Fancybox的onComplete事件中使用$(this)?

Ray*_*own 10 javascript jquery events this fancybox

我正试图$(this)在Fancybox的onComplete事件中使用jQuery ,但我遇到了麻烦.这是我的javascript代码:

$('a.iframe').fancybox({  
  centerOnScroll: true,  
  onComplete: function(){  
    var self = $(this);  
    var title = self.title;  
    alert(title.text());  
  }  
});
Run Code Online (Sandbox Code Playgroud)

我已经简化了上面的代码来解释我的观点,但我真的很乐意使用$(this),原因有几个,我不会在这里讨论.

Fancybox的文档显示了使用this而不是$(this)在其文档中使用的示例,但我没有看到任何在内部onComplete或其他事件中使用的示例.我当然尝试过使用this,但无济于事.

有谁知道我怎么可以参考触发a.iframe使用元素$(this)或其他任何方式onComplete事件?

编辑: 我使用Blackcoat的建议让这个工作,这里有最终的语法:

$('a.iframe').fancybox({
  centerOnScroll: true,
  onComplete: function( links, index ){
    var self = $(links[index]);  
    var title = self.find('.title').text();  
    alert(title); 
   }
});
Run Code Online (Sandbox Code Playgroud)

emp*_*ine 24

$(this)指向Fancybox对象,这就是为什么它不指向元素.如果您正在尝试获取目标元素,则可以执行以下操作:

var $self = $(this.element);
Run Code Online (Sandbox Code Playgroud)

  • 正是我在寻找的!请求Upvote! (2认同)

Bla*_*oat 15

Bitmanic,

可悲的是,你运气不好this,但你仍然可以参考当前的链接.定义您的回调以接受由jQuery选择的链接数组作为其第一个参数,并将索引作为第二个参数:

  $('a.iframe').fancybox({  
    centerOnScroll: true,  
    onComplete: function( links, index ){  
      var self = $(links[index]);  
      var title = self.title;  
      alert(title.text());  
    }  
  });
Run Code Online (Sandbox Code Playgroud)

以下是Fancybox如何调用onComplete hander:

if ($.isFunction(currentOpts.onComplete)) {
    currentOpts.onComplete(currentArray, currentIndex, currentOpts);
}
Run Code Online (Sandbox Code Playgroud)

他们没有使用Javascript callapply调用此函数作为对象的方法.换句话说,this将引用应用程序的全局范围(即document对象),因此您不能使用它来引用要对其执行的对象(对它们感到羞耻).相反,它们将三个参数传递给回调以指定上下文:( currentArray所选对象)currentIndex,和currentOpts.


Tay*_*kes 5

这是我的方法 - 也是最好的方法:

    $(".trigger").fancybox({
        onStart: function(element){
            var jquery_element=$(element);
            alert(jquery_element.attr('id'))
        }
    });
Run Code Online (Sandbox Code Playgroud)

您可以在http://www.giverose.com上查看