2011-10-14 48 views
0

我有一個Ajax更新發生在我的MVC視圖中。一旦它出現jQuery Live - 當項目添加到頁面時觸發

<% if (ViewData["colorOptionsMessage"] != null) { %> 
    <span class="ajaxMessage"><%= ViewData["colorOptionsMessage"] %></span> 
<% } %> 

我想atuomatically淡出這個消息了,我想這樣做一次,它的工作站點範圍:顯示一條消息,告知操作完成用戶。這是我試過,不工作(出現的消息,但警報不顯示):

$(function() { 
    $(".ajaxMessage").live("load", function() { 
     alert("once I can get this to show I'll put in a jueryUI fadeOut"); }); 
}); 

編輯

只是要清楚,我並不需要幫助淡出代碼;我只需要幫助讓Live()正確連線即可。

+0

我認爲這應該由你的AJAX函數的'success'回調來處理。當然,你的'.live'事件不起作用的原因是'load'不是一個有效的事件類型。 – Blazemonger

+0

您確定「加載」是正確的事件類型嗎?我寧願嘗試「更改」,因爲它不應該在頁面加載時觸發,但在AJAX更新改變了你的範圍內的某些東西之後。 – Christopher

+1

在ajax完成功能中,啓動您的fadeOut。您不需要成爲監控加載事件。在完成ajax調用後,您應該已經有代碼運行了。在那裏開始淡出。 – jfriend00

回答

2

有當新的元素被添加到頁面時自動通知沒有直接的方法。 $('.ajaxMessage').live('load')只會發生在load事件觸發圖像,iframe或對象/嵌入/小程序與class="ajaxMessage",一個load事件不觸發每個進入該頁面的新元素自己的目標。

您只能通過(a)DOM Mutation Events(通常得不到廣泛支持)或(b)持續輪詢來獲取.ajaxMessage選擇器並查看結果中是否出現新元素。

更好地手動$('.ajaxMessage', function() {...})立即(可能)將內容添加到頁面,在ajax()方法的success處理程序。

ETA:

jQuery的處理似乎沒有一個給ajaxForm成功

後執行。如果你不能趕上success直接,你可以嘗試使用註冊一個ajaxSuccess全球成功處理程序。

+0

+1爲Dom突變事件是一種方式! – DefyGravity

+0

@DefyGravity:不要讓自己的希望上升,它們[途徑貶低](http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents)而不是更廣泛支持。但是,我們的努力是讓事情更好地取代他們的位置。 –

0

當我想添加一些東西,等待幾個,並隱藏它,我使用setTimeout函數,而不是實時事件。我在成功回調中添加了代碼。

這是1秒的等待:

setTimeout(function(){ $("ajaxMessage").fadeOut(); }, 1000) 

當然,如果你不想等待,只是淡出元素的成功回調。

這可以嗎?

+0

我的目標是在添加它們時自動*隱藏這些消息。但它看起來並不像這是可能的。 –

+0

可以使用AjaxSetup()http://api.jquery.com/jQuery.ajaxSetup 使用ajaxSetup,您可以爲所有ajax請求設置一些默認行爲,包括.ajaxSuccess()和.ajaxComplete() 這可能會解決您的需要,但對我來說,它更具可讀性,可以對每個請求進行明確的回調。或者創建一個包裝這種行爲的函數。 –

0

我不認爲你可以綁定負載跨度。

IMG IFRAME BODY

1

下面的代碼希望您通過jQuery進行Ajax調用。如果ajax調用不是通過jQuery,那麼忽略這個答案。我們可以看到ajax調用本身嗎?

<Script type="text/javascript"> 
    $(function() { 
// this is a jQuery global ajax event that fires for every ajax, you need to check the URL 
     $.ajaxSuccess(function(e, xhr, settings){ 
      if (settings.url == 'URI/ for/ajax /message/load.') { 
      alert("once I can get this to show I'll put in a jueryUI fadeOut"); 
     } 
     }); 
    ); 

    </script> 
+0

特定ajax調用的.success消息是最好的,fyi。這是爲了防止你不能控制原始的jQuery ajax調用。 – DefyGravity

+0

這實際上會工作得很好,但我使用ASP.NET MVC 2,以便jQuery處理程序似乎不會在ajaxForm成功後執行。可惜,那將是理想的。對這個處理程序進行多餘調用並不是什麼大問題,因爲它只會導致調用隱藏不存在的消息。謝謝 –

+0

從未與asp.net mvc 2合作過。 :(你可以連線asp.net mvc 2 ajax調用在提交表單之前在頁面上觸發一個事件嗎? – DefyGravity

相關問題