最近做项目要用到三字码下拉,调用一个插件,但是滚动条不能点击。
后来看另一个插件后突发奇想,在点击其他区域的时候隐藏这个Div就可以了。
背景:输入文字,弹出下拉Div,点击或者拉动Div滚动条选择,但是要点击滚动条的时候会隐藏掉,也就是点击不了滚动条。
思路:写一个Document级别的事件,监听MouseDown事件,判断点击区域进行判断是否要隐藏这个下拉Div。
JS版实现:
$(document).bind('mousedown',function(event){ var $target = $(event.target); if((!($target.parents().andSelf().is('#' + suggestContainerId)))&& !$target.is('#' + target) ){ if($('#' + target).is(":focus")||$('#' + suggestContainerId).is(":focus")){ $('#' + suggestContainerId).hide(); $('#' + target).val(""); }else{ $('#' + suggestContainerId).hide(); } } });
AngularJs版本实现:
define(['angular'], function(){ var commonDirectives = angular.module("commonDirectives", []); commonDirectives.directive("zoneClick", function(){ return { restrict: "AE", scope:{ skey:"=",//控制显示隐藏的Key sid:"@"//手动传入一个ID }, link: function(scope, element, attrs){ scope.$watch('', function (o, n) { $(element[0]).attr("id",scope.sid); $(document).bind('mousedown', function (event) { var $target = $(event.target); if (!($target.parents().andSelf().is("#"+scope.sid))) { scope.$apply(function(){ return scope.skey = false; }) }else{ scope.$apply(function(){ return scope.skey = true; }) } }); }); } } }) })
注:('#' + suggestContainerId)和 ('#' + target)是当前场景下的ID;
var target=target = (event.target); 这一步是得到当前的目标点击对象。
注:(’#’ + suggestContainerId)和 (’#’ + target)是当前场景下的ID;
var target=(event.target); 这一步是得到当前的目标点击对象。