2010-02-18 47 views
1

首先,我已閱讀Stackoverflow上的相關帖子,但仍然卡住了。jQuery - 將處理程序應用於通過插件加載頁面後加載的元素

我有一個使用自定義網格插件加載數據的頁面。該數據需要有一個鏈接來啓動一個模式窗口(使用jqModal插件)。該窗口存在於html中,而不是由某個ajax調用獲取。因此,如果我將事件處理程序附加到頁面html中的鏈接,它可以正常工作。如果我將它應用到由此網格插件創建的鏈接,它不起作用。

下面將上已經存在於HTML,但不是由插件生成的鏈接環節的工作:

$(function() {  
var Foo = $('#Foo'); 
Foo.jqm({trigger: 'a.bar'}); 
}); 

我想我明白這是爲什麼,但是我也解決不了問題。 live不會削減它,因爲應該附加的事件是加載,而不是點擊或jQuery 1.3.2允許的其他事件(不能使用版本1.4)。我想bind可能是答案,但我不能得到它的工作,我很確定這只是我沒有「得到它」。

任何建議的讚賞,因爲我已經打了很長時間我的頭。

哦,什麼一個例子,我做了如何與動態加載數據做:

$('body').click(function(event) { 
      if ($(event.target).is('a.bar')) { 
       $(event.target).toggleClass('baz'); 
      } 
}); 

這將成功添加類「巴茲」的動態加載鏈接「a.someLink」點擊(我想我可以通過這種方式將觸發器類添加到鏈接,但無法弄清楚如何在加載時執行此操作,而不是點擊),但鏈接不會觸發模式窗口,我不知道爲什麼。

編輯:我在自定義網格插件,但對於時添加回調是我用下面把事情的工作:

$('.someclass').animate({opacity: 1}, 2000, function(){ 
      Foo.jqm({trigger: 'a.bar'}); 
}); 

的hackish,但它的伎倆在緊要關頭。

回答

1

您需要某種在加載動態內容時運行的回調。

如果JQM是jQueryModal,我相信這是一個onload回調:

$('#dialog').jqm({ 
    onLoad:function() { 
     // content is loaded? 
     console.log(!!$('.bar').length); // true if .bar exists 
    } 
}); 
+0

在onload觸發回調。在我的情況下,模式內容不是通過Ajax加載的(網格內容不是模式),它已經存在於頁面中,因此不會被觸發。 – Stuart 2010-02-18 18:09:28

1

,你可以創建一個函數,那麼你裝載什麼東西后Ajax調用期間調用它。

function setEvent() 
{ 
var Foo = $('#Foo'); 
Foo.jqm({trigger: 'a.bar'}); 
}; 

,並在阿賈克斯

success: function(msg) 
      { 
       Loadstuff(msg); 
       setEvent(); 
      }, 
相關問題