$(this).data不起作用

时间:2014-06-10 03:49:13

标签: javascript jquery ajax html5 custom-data-attribute

我在过去的两个小时里一直在研究,但无法让它发挥作用。

我通过ajax和$(this)加载内容.data对我来说根本不起作用。如果我将这个更改为实际的类,那么内容会加载,但这是一个投资组合,因此每个按钮都有一个不同的URL来加载。

HTML:

<a class="button" href="#project-full" data-work-item="portfolio-open.html">View Project</a>

JS:

var loadUrl = $(this).data('work-item');

$(".button").click(function(){
    $("#project-full").html(ajax_load).load(loadUrl);
      $("html, body").animate({ scrollTop: $('#project-full').offset(0,100).top }, 1000);
});

理论上,变量loadUrl不应该抓住“portfolio-open.html”并将其传递给下面的loadUrl吗?我确信我遗漏了一些重要的东西,但是从我读过的所有来源应该工作..

2 个答案:

答案 0 :(得分:4)

您需要将loadUrl定义放在click事件处理程序中,因为$(this)应引用您点击的锚元素:

$(".button").click(function(e) {
    e.preventDefault(); // stop the default anchor action
    var loadUrl = $(this).data('work-item');
    $("#project-full").html(ajax_load).load(loadUrl);
      $("html, body").animate({ scrollTop: $('#project-full').offset(0,100).top }, 1000);
});

不要忘记阻止默认的锚定操作(重定向)。

答案 1 :(得分:0)

以下是您的代码:

$(".button").click(function(e){
    e.preventDefault();
    var loadUrl = $(this).data('work-item');
    $(this.href).load(loadUrl);
    //$("html, body").animate({ scrollTop: $('#project-full').offset(0,100).top }, 1000);
});