2011-10-14 46 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

相关问题