zoukankan      html  css  js  c++  java
  • js 事件的递归调用

    递归绑定法(recursive binding)。jQuery里的.bind()方法,其实是一种对事件处理的通用写法。

    例如点击事件:.click(), 可以写成.bind(‘click’)。而.unbind(),顾名思义就是解除事件处理。

    <!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" xml:lang="en">
    	<head>
    		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
    		<title>jQueryPad Preview</title>
    		<script type="text/javascript" src="http://code.jquery.com/jquery-git.js"></script>
    		
    		<style type="text/css">
    		
    		body
    		{
    		    font-family: Segoe UI;
    		    font-size: 10pt;
    		    background: white;
    		}
    		
    		</style>
    		
    		<script type="text/javascript">
    
    function addItem() {
      $('#list1 li button')
      .unbind('click')//解除click事件
      .bind('click', function(){
      var $newLi = $('<li><button>新按钮</button></li>');
      $(this).parent().after($newLi);
      addItem();//使用递归函数重新赋值
      });
    }
    $(document).ready(function() {
      addItem();
      // 以下是原始事件绑定
      $('#list1 li button').click(function() {
      $(this).after('原始绑定');
      });
    });
    
            </script>
    		
        </head>
    	<body>
    
     <div>
       <ul id="list1">
         <li>非按钮 </li>
         <li><button>点击我</button> </li>
       </ul>
     </div>
    
        </body>
    </html>
    

    通过上面的演示,你可能发现一个问题:点击最初的按钮,你没有看到“原始绑定”这几个字别加在按钮后面。

    虽然在代码里,我定义了原始事件捆绑,但是在递归函数addItem()里,这原始事件被解除(unbind)了。

    如何让unbind函数只解除新的事件而保留原始事件呢。其中一种办法是,使用“命名空间”(namespacing)

    function addItemNS() {
    
      $('#list2 li button')
    
      .unbind('click.addit')//这里加上了addit,建立命名空间
    
      .bind('click.addit', function() {
    
        var $newLi = $('<li  > <button>新按钮</button></li>');
    
        $(this).parent().after($newLi);
    
        addItemNS();
    
      });
    
    }
    
    $(document).ready(function() {
    
      addItemNS();
    
      //原始事件捆绑
    
      $('#list2 li button').click(function() {
    
      $(this).after('原始捆绑');
    
      });
    
    });

      

  • 相关阅读:
    72. Edit Distance
    电脑常识
    java try·····catch·····异常处理学习
    java链接sqlserver数据库
    HTTP Status 500
    初识NDA
    Sublime Text_v2.02包含中文包以及使用方法
    ol 与ul 的区别
    word-break: break-all word-break:keep-all word-wrap: break-word三者的区别
    用deamon打开ISO文件,提示命令行错误!!
  • 原文地址:https://www.cnblogs.com/yanypan/p/2540159.html
Copyright © 2011-2022 走看看