我写了一个jquery脚本,工作正常,但现在我正试图把它变成一个插件。一旦它在插件中,html上的mouseup函数似乎每次都会将同一元素的缓存增加一个,我无法弄清楚原因。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
</head>
<body>
<div class="box">Box 1</div>
<script type="text/javascript">
//<![CDATA[
$(function(){
(function($) {
$.fn.myPlugin = function() {
return this.each(function(){
var $this = $(this);
$('html').mouseup(function(){
console.log('cached +1: ' + $this);//this ouput increases by one every mouseup
});//html mouseup
console.log('cached once: ' + $this);// this output displays once per mouseup
});// return this each
} //fn myPlugin
})(jQuery);
$('.box').mousedown(function(){
$(this).myPlugin();
});//.box mousedown
});//document ready
//]]>
</script>
</body>
</html>
如果有人可以解释为什么会这样(尽可能多的外行人的话),我将非常感激。
由于
答案 0 :(得分:1)
你应该告诉我们你真正希望实现的目标,但首先要注意:
每次点击该元素时,$(this).myPlugin()
都会被执行
此函数本身将事件处理程序绑定到mouseup
事件,因此每次单击该元素时,都会添加一个新的mouseup
事件处理程序(但它们都在执行相同操作)的东西)。
所以
$(this).myPlugin();
被调用 - &gt; 1 mouseup
事件处理程序。$(this).myPlugin();
被调用 - &gt; 2个mouseup
事件处理程序。$(this).myPlugin();
被调用 - &gt; 3个mouseup
事件处理程序
等