我有一个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');
});
第一个警报显示正确的代码,但打开功能内的第二个警告显示旧的警报。在第二次点击它将正常工作但我不明白如何选择旧值,因为第一次显示是正确的...
再次感谢您的帮助。
答案 0 :(得分:1)
首先:不要在jquery的最新版本中使用live
。
$('#list').on('click', '.status', function(e){
e.preventDefault();
alert(this.href);
});
这里我们将事件绑定到#list
,当我们插入新链接时,一切都会起作用。