0

我有一个 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>
}

我已经将这些链接与点击事件绑定:

$('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');
        }); 

第一个警报显示正确的代码,但 open 函数内的第二个警报显示旧代码。在第二次点击时它会正常工作,但我不明白它如何选择旧值,因为第一次显示是正确的......

再次感谢你的帮助。

4

1 回答 1

1

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

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

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

演示:jsfiddle.net/wPSH2/

于 2012-09-19T08:10:28.297 回答