Twitter bootstrap 无法阻止引导下拉列表在Meteor 0.8中使用日期选择器隐藏

Twitter bootstrap 无法阻止引导下拉列表在Meteor 0.8中使用日期选择器隐藏,twitter-bootstrap,datepicker,meteor,bootstrap-datepicker,meteor-blaze,Twitter Bootstrap,Datepicker,Meteor,Bootstrap Datepicker,Meteor Blaze,我的目标是让引导日期选择器内嵌在引导下拉列表中。我发现这是我想要做的最巧妙的用户体验 在升级到0.8之前,我让它工作得很好,但是现在只要选择了日期,下拉列表就会隐藏。我不想让它隐藏,因为我在下拉列表中有一个按钮来保存日期选择。除此之外,现在我无法在单击时向控制台写入任何内容。我试着在我能想到的日期选择器的各个方面设置点击事件。如果您单击月份箭头或日期周围的某个位置,而不是日期本身,则会触发下面的“单击”测试 任何帮助都将不胜感激。我有一种不健康的困扰 这是我的工作成果 HTML 模板渲染 我没有

我的目标是让引导日期选择器内嵌在引导下拉列表中。我发现这是我想要做的最巧妙的用户体验

在升级到0.8之前,我让它工作得很好,但是现在只要选择了日期,下拉列表就会隐藏。我不想让它隐藏,因为我在下拉列表中有一个按钮来保存日期选择。除此之外,现在我无法在单击时向控制台写入任何内容。我试着在我能想到的日期选择器的各个方面设置点击事件。如果您单击月份箭头或日期周围的某个位置,而不是日期本身,则会触发下面的“单击”测试

任何帮助都将不胜感激。我有一种不健康的困扰

这是我的工作成果

HTML

模板渲染


我没有一个完整的答案给你,但因为已经两天了,我想有些帮助可能比没有好

我发现datepicker响应了更改事件:

 'change #my-datepicker': function(e){
    e.stopPropagation();
    console.log('clicked');
}
我确实有同样的问题,家长下拉消失,我无法得到修复。也许考虑使用

它有一个比标准下拉菜单更丰富的API,包括show和hide方法


希望有帮助

这是我目前的解决办法。这是可行的,但并不完美

我最后点击了下拉隐藏事件,并像这样阻止了默认设置:

$('.schedule-dropdown').on('hide.bs.dropdown', function (e) {
    e.preventDefault();     
})
成功地阻止了下拉列表的消失,但现在的问题是它从未消失。因此,我只是简单地退出并添加了一个取消按钮,并将其与提交按钮链接,以手动关闭它,如下所示:

$('.schedule-dropdown').removeClass('open');
所以这是我现在最好的了。如果用户点击屏幕上的其他任何地方就可以关闭它,这将是一件很好的事情,但目前还不是很关键

编辑

如果用户单击其他任何位置,这里还有一个进一步的解决方法,可以将其关闭:

$('.schedule-dropdown').on('hide.bs.dropdown', function (e,t) {     
    e.preventDefault();         
}).on('show.bs.dropdown', function (e,t) {
    var ct = e.currentTarget;
    $('body').click(function(e) {
        var clicked = e.target;
        if($(clicked).hasClass('day')||$(clicked).hasClass('month')||$(clicked).hasClass('year')){
            //do nothing, they selected a date element
        } else {
            console.log('remove day');
            $(ct).removeClass("open");
            $('body').off('click');
        }

    })
})

谢谢@Jay,谢谢你的支持。我已经想出了一个工作周围张贴在下面的时间。引导选择看起来很有趣。
$('.schedule-dropdown').on('hide.bs.dropdown', function (e) {
    e.preventDefault();     
})
$('.schedule-dropdown').removeClass('open');
$('.schedule-dropdown').on('hide.bs.dropdown', function (e,t) {     
    e.preventDefault();         
}).on('show.bs.dropdown', function (e,t) {
    var ct = e.currentTarget;
    $('body').click(function(e) {
        var clicked = e.target;
        if($(clicked).hasClass('day')||$(clicked).hasClass('month')||$(clicked).hasClass('year')){
            //do nothing, they selected a date element
        } else {
            console.log('remove day');
            $(ct).removeClass("open");
            $('body').off('click');
        }

    })
})