另一个简单的jQuery问题

时间:2011-03-30 13:28:03

标签: javascript jquery

我有下面的代码,我希望创建一个IF语句,以便只为特定的HREF调用loadScript函数。但是当我尝试提醒href的值时,它会返回“Undefined”......

非常感谢, J

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

7 个答案:

答案 0 :(得分: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;
});

这样做可以确保您仍然可以访问您在load()回调中单击的内容。

答案 1 :(得分:1)

问题是上下文之一:警告中对$(this)的调用是指$('#sandbox')而不是$('.jNav')。只需为您首先参考定义一个变量。

答案 2 :(得分: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);
    //...
  });
}

答案 3 :(得分: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`
});

答案 4 :(得分:0)

在最内层的函数中,上下文(this)设置为#sandbox元素。您需要事先从.jNav元素获取href属性并将其存储在变量中。

Example code

答案 5 :(得分:0)

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

答案 6 :(得分: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;
            });
        });