使用jq的toggle函数实现全选功能遇到的问题

      今天作网站后台管理的时候,要实现一个单选全选的功能,很简单的功能,不过,遇到了一个很诡异的问题,写出来跟你们分享下。 app

      功能就不赘述了,你们都懂,最初打算使用jq的toggle函数来绑定两个处理方法,一个实现全选,一个取消全选。 函数


$("input[data-id='checkall']").toggle(
     function(){
         $("input[type='checkbox'][name='choice']").attr("checked","checked");
     },
     function(){
         $("input[type='checkbox']name='choice']").removeAttr("checked");
     }
)
         本觉得到这这样就完成了,不过,后来测试的时候,神奇的bug发生了。


 

        红色框框标记的那个复选框,不管如何都选不上,其余复选框却是正常,各类纠结、折腾,最终决定去看看jq的源码,是否是toggle这个函数有神马问题。 测试

     

toggle: function( fn ) {
		// Save reference to arguments for access in closure
		var args = arguments,
	            guid = fn.guid || jQuery.guid++,
		    i = 0,
		    toggler = function( event ) {
		    // Figure out which function to execute
		    var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
		    jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );

		    // Make sure that clicks stop
		    event.preventDefault();

		    // and execute the function
		    return args[ lastToggle ].apply( this, arguments ) || false;
		};

		// link all the functions, so any of them can unbind this click handler
		toggler.guid = guid;
		while ( i < args.length ) {
			args[ i++ ].guid = guid;
		}

		return this.click( toggler );
	}

    玄机显现,就是这句event.preventDefault(),致使复选框没法被选中,最后,仍是老老实实的加了个自定义属性,用绑定了click事件来实现。 网站

$("input[data-id='checkall']").click(function(){
      if($(this).attr("is-check") == "0")
      {
          $("input[type='checkbox'][name='choice']").attr("checked","checked");
          $(this).attr("is-check","1");
      }
      else{
          $("input[type='checkbox'][name='choice']").removeAttr("checked");
          $(this).attr("is-check","0");
      }
 });
   

 问题虽然很小,不过略恶心。。。 ui

相关文章
相关标签/搜索