返回的Jquery对象未定义

时间:2015-08-12 20:34:06

标签: javascript jquery scope

我正在尝试为我的fancybox(1.3.4)设置一个onClosed函数,但遇到了很多麻烦。 fancybox'href':paramater正常工作,但'onClosed'函数返回undefined。我是Jquery的新手。我想念的是什么?

$(".clickable-row").click(function() {
        $.fancybox({
          'href': $(this).attr('data-href'),
          'padding' : '20px',
          'width' : 950,
          'overlayOpacity'   :  '0.4',
          'overlayColor'         :  '#000',
          'hideOnContentClick' :   false,
          'autoScale'        :   true,
          'transitionIn'         :   'fade',
          'transitionOut'    :   'fade',
          'speedIn' : '300',
          'speedOut' : '300',
          'type'             :   'iframe',
          'onClosed' : function() {
              alert ( $(this).attr('data-href') );
          } 



      });

出于调试目的,我尝试使用alert函数来查看onClosed函数的输出。我的最终目标是将当前窗口的位置更改为“.clickable-row”中单独定义的URL。

用以下内容替换警报:

window.location.replace( $(this).attr('data-href2') );

HTML

<tr class='clickable-row' data-href='link1.asp' data-href2='link2.asp'>

1 个答案:

答案 0 :(得分:2)

这是一个简单的变量范围问题。您的关闭事件处理程序中的this与您的点击处理程序中的this不同。在点击处理程序中使用局部变量来&#34;保存&#34; this然后在关闭处理程序中使用此变量。

(".clickable-row").click(function() {
        var self = $(this);
        $.fancybox({
          'href': $(this).attr('data-href'),
          'padding' : '20px',
          'width' : 950,
          'overlayOpacity'   :  '0.4',
          'overlayColor'         :  '#000',
          'hideOnContentClick' :   false,
          'autoScale'        :   true,
          'transitionIn'         :   'fade',
          'transitionOut'    :   'fade',
          'speedIn' : '300',
          'speedOut' : '300',
          'type'             :   'iframe',
          'onClosed' : function() {
              alert (self.attr('data-href') );
          } 
      });