Html mouseup多次缓存一个元素

时间:2011-02-21 11:57:34

标签: javascript jquery

我写了一个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>

如果有人可以解释为什么会这样(尽可能多的外行人的话),我将非常感激。

由于

1 个答案:

答案 0 :(得分:1)

你应该告诉我们你真正希望实现的目标,但首先要注意:

每次点击该元素时,$(this).myPlugin()都会被执行 此函数本身将事件处理程序绑定到mouseup事件,因此每次单击该元素时,都会添加一个新的mouseup事件处理程序(但它们都在执行相同操作)的东西)。

所以

  1. 点击:$(this).myPlugin();被调用 - &gt; 1 mouseup事件处理程序。
  2. 点击:$(this).myPlugin();被调用 - &gt; 2个mouseup事件处理程序。
  3. 点击:$(this).myPlugin();被调用 - &gt; 3个mouseup事件处理程序 等