2011-10-08 31 views
0

我正在使用ajax調用來渲染一個部分。問題是,當調用完成時,我的jquery代碼僅適用於新插入的HTML ,如果我使用live()方法(據我所知)。是否有一個檢測僅存在的JQuery事件?

我已經成功地將live()方法用於那些具有「點擊」事件的選擇器。例如:

$('.course_name_click').live('click', function(e) { 
    $(this).closest('div').next().slideToggle('slow'); 
    e.preventDefault(); 
}); 

但我不知道如何使用live()作爲簡單的hide()函數。也就是說,我想要一個HTML片段在第一次出現時被隱藏。我認爲load()可能工作,但它不。有什麼建議麼?

$('.descrip_body').live('load', function(e) { 
    $('.descrip_body').hide(); 
}); 

只是要清楚,我想改造

$('descrip_body').hide(); 

到使用現場版本()。


作爲對答案的迴應,試圖將一個hide()回調附加到AJAX請求。但它仍然不起作用(即相關的HTMl沒有隱藏)。下面是代碼:

$("#courses_body").html("<%= escape_javascript(render :partial => 'courses') %>", function() { 
    $('.descrip_body').hide(); 
}); 

回答

3

兩個問題:

1 - 你能不能用,有一個display:none風格已經是一個類加載HTML?

2-你不能把你的$('.descrip_body').hide();代碼放在你的成功回調函數上嗎?

我知道這是不是正是你問什麼,但他們可能工作,以及...

+0

啊,第一個是一個簡單的修復!謝謝!至於第二,我試了一下,但沒有奏效。如果您有任何見解,我會用新代碼更新我的問題。 – jyli7

0

如何HTML片段被加載在首位?爲什麼不在AJAX調用返回時隱藏它?

1

看起來你實際上沒有AJAX請求 - 一個AJAX請求會打到一個特定的URL,從URL返回標記,並觸發一個「成功」方法作爲回調。 jQuery使用$ .ajax,$ .post和$ .get來執行此操作。

$ .html更直接 - 它立即向DOM注入一串標記。這就是你正在使用的,因爲Rails的部分是直接把這個字符串放到你的$ .html()參數中。

因此,從我收集的信息來看,您實際上不需要回調或任何類型的事件,因爲您所做的不是異步的......您無需等待您的標記出現在頁面上;你可以注入它並開始對它進行操作。嘗試:

$("#courses_body") 
    .html("<%= escape_javascript(render :partial => 'courses') %>") 
    .find(".descrip_body") 
    .hide(); 
+0

啊,那有效!而且非常明確的解釋。謝謝! – jyli7