2013-03-19 171 views
0

在網頁test.php的我加載content.php是這樣的:在content.phpjQuery的,我的變量有兩個值

$(document).on('click', '.test', function() { 
     $('#content').load('content.php'); 
}); 

我有這樣的jQuery代碼:

$(function() { 
    var nb = 10; 
    $(document).on('click', '.trigger', function() { 
     alert(nb); 
     nb +=10; 
    }); 
    $(document).on('click', '.exit', function() { $('#content').html(''); }); 
}); 

當我第一次點擊#content nb作爲值10時,我可以通過點擊它來增加它,例如我點擊了3次,所以它的值是40.然後我關閉div點擊.exit,然後點擊#content重新加載content.php。現在我有兩個警告:nb值10,但它也有值40,它怎麼還有值40?

+3

做,所以你需要使用'.off()'方法來刪除'click'事件。 – hjpotter92 2013-03-19 09:36:08

+0

正是由於該事件被登記到文件的對象,當''#content''先加載有一個事件處理程序註冊,然後當它被刪除的事件處理程序不會被刪除 – 2013-03-19 09:36:58

+0

@DreamEater我應該在哪裏只是這種方法究竟? – 2013-03-19 09:37:39

回答

0

這是因爲當你卸下#content,你是不是刪除已註冊的事件處理程序。

您可以通過使用.off

$(function() { 
    var fn = function() { 
     alert(nb); 
     nb += 10; 
    }; 

    var nb = 10; 

    $(document).on('click', '.trigger', fn); 
    $(document).on('click', '.exit', function() { 
     $('#content').html(''); 
     $(document).off('click', '.trigger', fn); 
    }); 
}); 
+0

非常感謝!!!!!!! – 2013-03-19 09:52:42

1

您正在執行兩次匿名函數。所以在不同範圍內有兩個變量nb。加載視圖後,您的事件處理程序再次綁定。所以先解除它:

$(document).off('click.MyEventHandler').on('click.MyEventHandler', '.trigger', function() { 
    alert(nb); 
    nb +=10; 
}); 

我把事件命名空間中的.MyEventHandler避免禁用其他點擊事件。但實際上,您應該更好地使用最接近的父內容作爲事件偵聽器。所以:

$('#content').off('click.MyEventHandler').on('click.MyEventHandler', '.trigger', function() { 
    alert(nb); 
    nb +=10; 
});