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

谁说我不能喝 提交于 2019-12-10 06:10:34

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

      功能就不赘述了,大家都懂,最初打算使用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");
      }
 });
   

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






易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!