2011-03-30 107 views
2

我有下面的代码,我希望创建一个IF语句,以便只为特定的HREF调用loadScript函数。但是,当我试图提醒返回“未定义”中的href的值...另一个简单的jQuery问题

非常感谢, Ĵ

$(document).ready(function() 
     { 
      $('.jNav').click(function() 
      { 
       $('#sandbox').load($(this).attr('href'),function() 
       { 
        alert("From here " + $(this).attr('href') + " to here."); 
        loadScript(); 
       }); 
       return false; 
      }); 
     }); 
+0

如果它是那么容易那么我想你知道该怎么做了! – 2011-03-30 13:34:14

+1

哇! 2分钟内答复如此之多。按照OP的承诺,这一定非常简单:)。当我在通知栏中看到'已发布4个新答案'时,我停止写答案。 – 2011-03-30 13:37:10

回答

3

您的问题只是作用域。在你的load()回调函数中,这指的是你正在调用load()的元素,恰好是$('#sandbox'),因此:no href。通常我做的是这样的:

$('.jNav').click(function() 
{ 
    var self = this; 
    $('#sandbox').load($(this).attr('href'),function() 
    { 
    // Notice the use of self here, as we declared above 
    alert("From here " + $(self).attr('href') + " to here."); 
    loadScript(); 
    }); 
    return false; 
}); 

这样做可以确保你仍然可以得到您从负载()回调里面点击的东西。

+0

你可以使用'var self = this.href;' – 2011-03-30 21:19:23

+0

@aSeptic True dat。但是,一般来说,这样的调用对象的范围是很好的做法,以防你不仅仅需要它的href。 – Groovetrain 2011-03-30 23:04:59

0

里面你innnermost功能上下文(this)设置为#sandbox元件。您需要事先从.jNav元素获取href属性,并将其存储在一个变量中。

Example code

1

问题是上下文之一:在警报中致电$(this)是指$('#sandbox')而不是$('.jNav')。只需定义一个变量供您首次参考。

0

照顾“这个”是什么部分你的功能。在最里面的函数中,你从$('#sandbox')调用它,我怀疑它没有href属性。最好的解决方案可能是将href的值传递给函数或将其存储在变量中。

1

当您在$('#sandbox').load的回调中时,this指的是$('#sandbox'),而不是$('.jNav')。如果要提醒href,请将该变量(或对this的引用)保存在变量中。

$('.jNav').click(function(){ 
    var that = this; 
    $('#sandbox').load($(this).attr('href'),function(){ 
    alert($(that).attr('href')); 
    //... 
    }); 
} 

OR

$('.jNav').click(function(){ 
    var href = $(this).attr('href'); 
    $('#sandbox').load($(this).attr('href'),function(){ 
    alert(href); 
    //... 
    }); 
} 
0
$(document).ready(function() 
     { 
      $('.jNav').click(function() 
      { 
       $('#sandbox').load($(this).attr('href'),function() 
       { 
        alert("From here " + $(this).parent().attr('href') + " to here."); 
        loadScript(); 
       }); 
       return false; 
      }); 
     }); 
+0

'.jNav'实际上可能不是'#sandbox'的父项。 – 2011-03-30 13:37:57

1

$(this).jNav,但在回调它现在的#sandbox。将变量预先缓存到提供给您的位置,然后在任何你喜欢的地方使用它。

上Groovetrain的回答略有改善,我会写:

$('.jNav').click(function(event) { 
    var $self = $(this); 
    var href = $self.attr('href'); 

    $('#sandbox').load(href, function() { 
    alert("From here " + href + " to here."); 
    loadScript(); 
    }); 

    event.preventDefault(); // better than `return false` 
}); 
+0

您需要将'event'传入点击功能。 – 2011-03-30 13:38:44

+0

@火箭:哎呀,固定感谢;) – 2011-03-30 13:42:15