我在这里做了一个简单的plunkr http://plnkr.co/edit/zNb65ErYH5HXgAQPOSM0?p=preview
我创建了一个小日期选择器,我希望当你将注意力集中在它上面时(自动选择聚焦),如果我在输入上设置模糊我无法使用datepicker,如果我将focusout事件放在datepicker上它不起作用
我也尝试过:
angular.element(theCalendar).bind('blur', function () {
$scope.hideCalendar();
});
但它没有用。
有任何线索吗?
答案 0 :(得分:1)
这是因为你在有机会做任何事情之前删除了这个项目,这是一个有效的例子:
http://plnkr.co/edit/mDfV9NLAQCP4l7wHdlfi?p=preview
只需添加超时:
thisInput.bind('blur', function () {
$timeout(function(){
$scope.hideCalendar();
}, 200);
});
你考虑过使用现有的datepickers吗?比如angularUI或angular-strap:http://mgcrea.github.io/angular-strap/##datepickers
更新
不是一个完整的解决方案,但应该让你更接近:
angular.element($document[0].body).bind('click', function(e){
console.log(angular.element(e.target), e.target.nodeName)
var classNamed = angular.element(e.target).attr('class');
var inThing = (classNamed.indexOf('datepicker-calendar') > -1);
if (inThing || e.target.nodeName === "INPUT") {
console.log('in');
} else {
console.log('out');
$timeout(function(){
$scope.hideCalendar();
}, 200);
}
});
http://plnkr.co/edit/EbQl5xsCnG837rAEhBZh?p=preview
您要做的是听取页面上的点击,如果点击在日历之外,则关闭它,否则什么都不做。以上只考虑到您点击了包含类名称包含datepicker-calendar的内容,您需要对其进行调整,以便在日历中单击也不会关闭它。
答案 1 :(得分:1)
关闭鼠标输出怎么样?
如果你移动到日历中的另一个div,你需要取消关闭:
//get the calendar as element
theCalendar = element[0].children[1];
// hide the calendar on mouseout
var closeCalendarTimeout = null;
angular.element(theCalendar).bind('mouseout', function () {
if ( closeCalendarTimeout !== null )
$timeout.cancel(closeCalendarTimeout);
closeCalendarTimeout = $timeout(function () {
$scope.hideCalendar();
},250)
});
angular.element(theCalendar).bind('mouseover', function () {
if ( closeCalendarTimeout === null ) return
$timeout.cancel(closeCalendarTimeout);
closeCalendarTimeout = null;
});
修改强>
向div添加tabindex属性会导致它触发焦点并模糊事件。
, htmlTemplate = '<div class="datepicker-calendar" tabindex="0">' +
angular.element(theCalendar).bind('blur', function () {
$scope.hideCalendar();
});
答案 2 :(得分:0)
所以,我知道这可能不是最好的做法或最好的方法,但最后我修好并得到了我需要的东西:
thisInput.bind('focus click', function bindingFunction() {
isMouseOnInput = true;
$scope.showCalendar();
angular.element(theCalendar).triggerHandler('focus');
});
thisInput.bind('blur focusout', function bindingFunction() {
isMouseOnInput = false;
});
angular.element(theCalendar).bind('mouseenter', function () {
isMouseOn = true;
});
angular.element(theCalendar).bind('mouseleave', function () {
isMouseOn = false;
});
angular.element($window).bind('click', function () {
if (!isMouseOn && !isMouseOnInput) {
$scope.hideCalendar();
}
});
我设置了一些布尔变量来检查单击页面时鼠标的位置,如果你有一些更好的解决方案,它会像魅力一样工作,请告诉我,但这实际上解决了所有问题。
我接受这个作为答案,但我感谢本页面上的所有人!