【问题标题】:jQuery returns "undefined" trying to find hrefjQuery返回“未定义”试图找到href
【发布时间】:2024-01-08 06:02:02
【问题描述】:

我正在尝试将其包装成一个函数:

//Entire Div Clickable
function clickableDiv(){
window.location = $(this).find("a").attr("href");
return false;
}

然后调用它:

$("div.promo1").click(function(){
clickableDiv();
});

但它返回一个网址:www.mywebsite.com/undefined

任何想法我做错了什么?

谢谢。

【问题讨论】:

  • <div class="promo1"> <p>Some text</p> <h4><a href="/link/">Learn more »</a></h4> </div><!--end promo1-->

标签: jquery href undefined attr


【解决方案1】:

问题在于您通常调用clickableDiv,而不是将其绑定到事件。您正在从事件处理程序运行它,而不是将其设置为 事件处理程序。这意味着 this 未设置为元素。

您应该将函数设置为事件处理程序。

$("div.promo1").click(clickableDiv);

【讨论】:

  • 谢谢。我试图将它包装成一个函数,这样我就可以在整个站点中多次使用它并节省文件大小。这可能吗?
  • @Yahreen 我不确定您的意思,但 Sime 的回答看起来像是对您进行了排序。不过,我不会太担心文件大小。如果它太大,你会从一个缩小器中得到比这样的小调整更多的东西。#
【解决方案2】:
function clickableDiv(div) {
    window.location = $(div).find("a").attr("href");
}

$("div.promo1").click(function() {
    clickableDiv(this);
});

您必须将对 DIV 的引用传递给 clickableDiv 函数。


更新:替代解决方案:

function clickableDiv() {
    window.location = $(this).find("a").attr("href");
}

$("div.promo1").click(clickableDiv);

【讨论】:

  • 是的,我想将它包装成一个函数,这样我就可以在整个站点中多次使用它并节省文件大小。
  • @Yahreen 我已经用替代解决方案更新了我的答案。考虑一下。