2012-09-19 90 views
0

我有一個ASP.NET MVC 3.0局部視圖,這是在jQuery UI對話框中呈現。 在這個部分視圖中,我有一些鏈接可以幫助我顯示更多信息。JQuery綁定點擊事件保留舊綁定值

@foreach (StatusType status in ViewBag.Status) 
{ 
    <li>@status.StatusMessage<a href='#' status='@status.StatusCode'><img [email protected]("~/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.

更多部分視圖我會加載我在警報中的更多價值。 我不明白爲什麼它讓我喜歡我點擊過的所有代碼的歷史。

如果有人對這個問題有任何的想法,它會受到歡迎,它只是讓我發瘋。

在此先感謝。

修訂

使用的上,而不是實時的作品,但我仍然有對話的問題。 我已經改變與解決方案的代碼建議:

  $('#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函數裏面的第二個警報顯示舊的。在第二次點擊它會正常工作,但我不明白它是如何選擇舊值,因爲第一個顯示是正確的...

再次感謝您的幫助。

+0

我認爲你必須在局部視圖jQuery代碼和每個負載之後,您將新的事件。 – webdeveloper

回答

1

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

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

在這裏,我們結合事件#list當我們將插入新的鏈接,這樣就可以了。

演示:jsfiddle.net/wPSH2/

+0

感謝您的回答,它解決了我的一個問題。當我嘗試顯示對話框時,仍然遇到一些問題,但出於未知原因,當我嘗試在對話框的打開功能中再次顯示代碼時,它會選擇以前的值。我仍然不明白爲什麼...... – LotuX