可以从jQuery中的回调函数访问clicked元素吗?

时间:2011-08-16 16:31:33

标签: javascript jquery

我有以下HTML:

<div id="main">
    <a id="sub1">sub1</div>
    <a id="sub2">sub2</div>
</div>
<div id="other" style="display:none">
 some stuff    
</div>

以及以下jQuery:

$("div#main a").click(function () {
    $("#other").fadeIn(500,AlertSomething);
});

function AlertSomething()
{
     alert($(this).attr("id"));   
}

我想提醒从我的回叫功能中点击的锚点的ID,但警报始终显示“其他”。在文档中阅读之后:

  

回调不会发送任何参数,但会将其设置为DOM   元素动画。

我理解为什么,但我很好奇是否有可能做我想做的事情?

此处提供小提琴:http://jsfiddle.net/RxcRY/

4 个答案:

答案 0 :(得分:3)

只需将您的AlertSomething方法传递给ID。

$("div#main a").click(function () {
    $("#other").fadeIn(500, AlertSomething($(this).attr("id"));
});

function AlertSomething(theID)
{
    alert(theID);   
}

这是a working fiddle

网站注意:

您的锚标记正在使用</div>而不是</a>关闭。这将导致jQuery附加到第一个锚点的click事件,但不会附加到后续锚点。修复标记后,jQuery将附加到div中的每个锚点。

答案 1 :(得分:2)

.click()函数传递表示点击的事件对象。此对象的一部分是单击的目标,因此只需将事件处理程序传递给您的函数。

$("div#main a").click(function (e) {
    $("#other").fadeIn(500,AlertSomething(e.target));
});

function AlertSomething(obj) {
   alert($(obj).attr('id'));
}

答案 2 :(得分:0)

你可以试试这个:

$("div#main a").click(function (e) {
    $("#other").fadeIn(500,AlertSomething(e));
});

function AlertSomething(e)
{
    console.log(e); // this will show you the "click" event. 
    //alert($(this).attr("id"));   
}

答案 3 :(得分:0)

$("div#main a").click(function () {
   var clickedElement = $(this);
    $("#other").fadeIn(500, function() { AlertSomething(clickedElement); });
});

function AlertSomething(el)
{
     alert($(el).attr("id"));   
}

这可能会有所帮助