在jQuery中动态更改内容时要使用哪个Click事件处理程序?

时间:2014-03-12 20:50:21

标签: javascript jquery html

我在jQuery中有一个小应用程序,它接受一个锚元素的href值,并将其作为div的ID进行插入。 div是一个基本的弹出窗口,仅在触发时才可见。

如果使用与弹出div的href相同的id值单击锚标记,则会触发弹出窗口。

HTML代码:

<a href="#i1" id="item1">Item 1</a>
<a href="#i2" id="item2">Item 2</a>
<a href="#i3" id="item3">Item 3</a>

<div class="popup"></div>

jQuery代码:

var items = ["#item1", "#item2", "#item3"];

$.each(items, function()
{
    $(document).on("click", this, function(e)
    {
        e.preventDefault();
        var href   = $(this).attr("href");
        var length = href.length;
        var anchor = href.substring(1, length);
        var popup  = $(".popup").attr("id", anchor);
    });
});

问题:

一旦客户点击上面的任何锚点,就应该触发弹出窗口。但是,它只会在第二次单击时触发。我猜第一个设置了Id,第二个打开了设置值。

我还尝试使用其他类型的点击事件,它适用于第一次点击。这项活动一直在进行:

$(this).on("click", function(e)
{
    // Stuff goes here as above
});

我的问题是我不能使用这种类型的事件处理程序,因为我将使用jQuery动态地更改锚点href的内容。


问题:

如何使原始代码按预期工作,因此客户端应该只点击一次锚标记以获取弹出窗口?还有其他我应该考虑的事情吗?

1 个答案:

答案 0 :(得分:0)

$('#item1').on("click", function(e)
{
    // Stuff goes here as above
});

$('#item2').on("click", function(e)
{
    // Stuff goes here as above
});