2009-12-14 184 views
0

這可能是推動jquery的極限。jQuery如何讓一個事件觸發一次只觸發一次div

我想要觸發live()事件。但我只想讓它使用one()事件觸發一次。

目前我有代碼打擊。我如何限制這隻能被調用一次。

$(".sub-content").live('click', function() { 
     var id = this.id; 
     $.get("InfoRetrieve", { theid:id }, function(data) { addContent(data, id) }); 
    }); 

回答

1

有幾種方法可以做到這一點。首先,你可以只使用一個標記:

<div class="sub-content not-loaded">...</div> 

有:

$("div.sub-content.not-loaded").live("click", function() { 
    $(this).removeClass("not-loaded"); 
    ... 
}); 

很明顯,你可以做到這一點的其他方式,以及(添加一個類來標記它已經加載)。我不是100%以上將與live()正確處理這種情況下:

$("div.sub-content.not-loaded").live("click", function() { 
    if ($(this).hasClass("not-loaded")) { 
    $(this).removeClass("not-loaded"); 
    ... 
    } 
}); 

會工作。

或者,您可以解除綁定該事件。

$("div.sub-content").click(load_content); 

function load_content() { 
    $(this).unbind("click", load_content); 
    ... 
} 

我不是100%肯定會與不過live()(如live()可能只是重新綁定)工作。

+0

它似乎並沒有在這種情況下工作,但我絕對學到了東西,無論如何,謝謝。 – Ankur 2009-12-15 02:15:39

0

可以使用die方法:

$(".sub-content").live('click', function() { 
    $(this).die('click'); 
    var id = this.id; 
    $.get("InfoRetrieve", { theid:id }, function(data) { addContent(data, id) }); 
}); 

我從來沒有測試它雖然。

+0

這將刪除所有點擊事件。 OP只想確保每個div只加載一次,這不完全相同。你的方式會殺死所有的點擊事件,當第一個div被點擊,所以沒有人可以點擊。 – cletus 2009-12-14 09:25:06