2011-06-01 70 views
1

我爲jQuery寫了一個插件,但現在我的用戶要求能夠在同一頁上的各種元素上運行我的插件,所以我試圖重寫它。使用jQuery與上下文生活

我與我的活動有問題。

這是什麼工作。

$(".jTagLabels label").live('mouseenter',function(){ 
    $("#"+$(this).attr('rel')).css('opacity',1).find("span").show(); 
    $(".jTagDeleteTag").show(); 
}); 

現在我試圖在特定的上下文中註冊此事件,但它不工作。

$(".jTagLabels label",container).live('mouseenter',function(){ 
    $("#"+$(this).attr('rel')).css('opacity',1).find("span").show(); 
    $(".jTagDeleteTag",container).show(); 
}); 

的console.log(容器)返回正確的DOM元素...

這可能是重要的說,當我安裝時沒有jTagLabels創建,這就是爲什麼我使用的live()函數...

回答

5

使用delegate(),它是一個更清潔,這就是它的作品,即使生成的代碼可能是相同的。

同樣取決於您的代碼上下文,您的container變量很可能在綁定事件和觸發它之間失去其價值。

$(container).delegate(".jTagLabels label",'mouseenter',function(){ 
    var $this = $(this); 
    $("#"+$this.attr('rel')).css('opacity',1).find("span").show(); 

    // There should be an easier way to find your container, 
    // like .closest('.someclass') 
    $this.parent().parent().find('.jTagDeleteTag').show(); 
});