JQuery绑定点击事件保留旧的绑定值

时间:2012-09-19 07:48:33

标签: jquery-ui click jquery

我有一个ASP.NET MVC 3.0局部视图,它在jquery ui对话框中呈现。 在这个局部视图中,我有一些链接可以帮助我显示更多信息。

@foreach (StatusType status in ViewBag.Status)
{
    <li>@status.StatusMessage<a href='#' status='@status.StatusCode'><img src=@Url.Content("~/Content/Images/information.png") alt="See detail"/></a></li>
}

我已将这些链接与click事件绑定在一起:

$('a[status]').live('click', function (e) {
            if (e.preventDefault)
                e.preventDefault();
            else
                e.returnValue = false;
            var status = $(this).attr('status');
            alert('@Model.Code');
            ...});

当我第一次点击链接时,它会显示正确的代码(比方说12)。当我再次为另一个代码(66)加载局部视图时,它会显示两条警告信息,第一条带有12条(我之前点击的旧值),第二条带有66条。

我将加载更多局部视图,我将在警报中加载更多值。 我不明白为什么它让我像我点击的所有代码的历史。

如果有人对这个问题有任何想法,那将会受到欢迎,这只会让我发疯。

提前致谢。

已更新

使用on而不是live作品,但我仍然有对话框的问题。 我用建议的解决方案改变了代码:

            $('#StatusDiv').on('click', 'a[status]', function (e) {
            e.preventDefault();
            var status = $(this).attr('status');
            alert('@Model.Code');
            $('#StatusDialog').dialog({
                autoOpen: false,
                width: 800,
                resizable: true,
                title: 'Status Info',
                modal: true,
                open: function (event, ui) {
                    alert('@Model.Code');
                    $(this).load('@Url.Action("ViewStatusInfo")', { clientId: clientId, Code: '@Model.Code', status: status
                    });
                }
            });
            $('#StatusDialog').dialog('open');
        }); 

第一个警报显示正确的代码,但打开功能内的第二个警告显示旧的警报。在第二次点击它将正常工作但我不明白如何选择旧值,因为第一次显示是正确的...

再次感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

首先:不要在jquery的最新版本中使用live

$('#list').on('click', '.status', function(e){
    e.preventDefault();
    alert(this.href);
});

这里我们将事件绑定到#list,当我们插入新链接时,一切都会起作用。

演示:jsfiddle.net/wPSH2/