我有一个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');
有什么想法吗?