$(event.target)上的jQuery .closest禁用其他点击事件

时间:2014-01-14 20:22:01

标签: javascript jquery datepicker

我有一个jQuery插件项目,实际上如果它有助于它在github中,你可以在https://github.com/jondmiles/bootstrap-datepaginator/tree/1.2.0看到完整的代码。

所以我有一个click事件处理程序,它做的第一件事就是使用jQuery .closest来查找DOM并找到用户点击的父锚标记。这是必要的,因为图标位于某些锚之前,我希望我正在处理的元素具有一致性。

如果你想在上下文中使用/src/bootstrap-datepaginator.js第273行,那么这是有问题的代码。

    _clickedHandler: function (event) {
        event.preventDefault();
        var target = $(event.target).closest('a');
        var classList = target.attr('class') ? target.attr('class').split(' ') : [];

        if (classList.indexOf('dp-no-select') !== -1) {
            // do nothing
        }
        else if (classList.indexOf('dp-nav-left') !== -1) {
            this._navBack();
        }
        else if (classList.indexOf('dp-nav-right') !== -1) {
            this._navForward();
        }
        else if (classList.indexOf('dp-item') !== -1) {
            this._select(target.attr('data-moment'));
        }
    },

现在我还有一个日期选择器(https://github.com/eternicode/bootstrap-datepicker),它附加到一个图标元素,在渲染过程中添加。

看起来像是项目中的第476行

        if (this.$calendar) {
            this.$calendar
                .datepicker({
                    autoclose: true,
                    forceParse: true,
                    startView: 0,
                    minView: 0,
                    todayHighlight: true,
                    startDate: this.options.startDate.date.toDate(),
                    endDate: this.options.endDate.date.toDate()
                })
                .datepicker('update', this.options.selectedDate.date.toDate())
                .on('changeDate', $.proxy(this._calendarSelect, this));
        }

当用户点击日历图标时,应显示日期选择器。它曾经,直到最近的变化,但现在没有任何反应;没有日历。

我已经将问题追溯到添加了最近添加的.closest()方法。因此,似乎调用事件目标上的.closest()有些人如何抑制datepicker,但我无法弄清楚为什么,或者如何解决这个问题。

所以回顾一下,当它工作时,第275行看起来像这样

var target = $(event.target);

现在它不起作用,第275行看起来像这样

var target = $(event.target).closest('a');

有什么想法吗?

0 个答案:

没有答案