[英]calling javascript function too many times
我剛接觸Javascript,並且用不同的代碼段多次遇到相同的問題:我有一個創建元素類型的函數和一個對該元素類型做某事的函數。 對我來說似乎很明顯,在元素創建之后,我需要調用“執行某事”功能,但是當我這樣做時,它最終運行的次數超過了我想要的次數。
這是我的問題的一個例子:
function rightClick(){
$(".element").mousedown(function(e){
switch (e.which){case 3: alert( $(this).attr("id") )};
});
};
function doubleClick(){
var counter = 0;
$(document).dblclick(function(e){
counter++;
elementId = "element" + counter;
$("#new_elements").append("<div class='element'" +
"id='" + elementId + "'" +
"style='position:absolute;" +
"top:" + e.pageY + ";" +
"left:" + e.pageX + ";'>" +
elementId+ "</div>");
rightClick();
});
在此示例中,如果我創建4個元素,然后右鍵單擊創建的第一個元素,最終將得到4個警報框而不是一個。 如果我右鍵單擊創建的第二個元素,則會收到三個警報; 第三:2個警報; 第四:一個警報。
誰能向我解釋為什么會發生這種情況,以及如何解決它,以便每次我右鍵單擊某個元素時只收到一個警報?
.mousedown
和類似事件僅綁定到已經存在的元素上。 rightClick()
都會將一個新事件綁定到所有當前的.element
元素。 .on
或.delegate
,其工作方式如下: $(document.body).on("mousedown", ".element", function(e) { if (e.which === 3) alert($(this).attr("id")); });
jQuery.fn.delegate的示例
$(document.body).delegate(".element", "mousedown", function(e) { if (e.which === 3) alert($(this).attr("id")); });
只需調用一次,您就可以了。 如果您未使用jQuery 1.7或更高版本,則需要使用.delegate()
而不是.on
。
您無需在每次將元素插入DOM時都綁定事件。 您可以使用.on
為動態插入的元素附加事件處理程序。
$(document).on('mousedown','.element', (function(e){
switch (e.which){
case 3: alert( $(this).attr("id") );
break;
};
});
var counter = 0;
$(document).dblclick(function(e){
counter++;
elementId = "element" + counter;
$("#new_elements").append("<div class='element'" +
"id='" + elementId + "'" +
"style='position:absolute;" +
"top:" + e.pageY + ";" +
"left:" + e.pageX + ";'>" +
elementId+ "</div>");
});
我相信您會多次添加相同的處理程序,這意味着單擊按鈕時,會將操作重新綁定到相同的功能。
您已將事件處理程序綁定到類“ .element”。 這意味着,右鍵單擊時,頁面上所有帶有類“ .element”的元素都會觸發該事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.