【发布时间】:2017-07-16 03:03:06
【问题描述】:
我正在尝试检测是否在 DatePicker 控件上发生了点击,但我无法准确确定事件目标元素是否是 DatePicker 的一部分。
经过大量调试,我意识到主要问题是 DatePicker 的各个部分与文档分离,因此它们根本不是任何元素的子元素。
感谢this other question,我了解到原因是在切换月份时删除并替换了一部分 DatePicker,因此我从 event.target 获得的元素已分离(它是已删除块的一部分) .
那么,我可以做些什么来确定这次点击发生在我的控制范围内?我正在尝试以不可知论的方式编写此内容,以了解正在使用的内容类型,尽管可以对 DatePickers 进行特定修复。
到目前为止,我所做的是检查我的元素是否包含 DatePicker,以及事件目标是否已分离。如果是这样,我假设点击发生在 DatePicker 上。这并不完美,因为页面上可能还有另一个 DatePicker。此外,被分离的事件目标不一定与 DatePicker 相关。
这是我到目前为止的一个例子:
$(document).on("click", function (event) {
const stuff = $("something");
if (stuff.is($(event.target)))
return; // click was on stuff
if ($(event.target).closest(stuff).length)
return; // click was on descendents of stuff
if (stuff.is(":active, :focus"))
return; // stuff is active or focused
if (stuff.find(":active, :focus").length)
return; // a descendent of stuff is active or focused
if (stuff.is(".hasDatepicker") || stuff.find(".hasDatepicker").length) {
// stuff is or has a date picker
if (!$(event.target).closest($(document)).length) {
// event target is detached, and there's a date picker in stuff
// so have to assume click was on stuff's date picker
return;
}
}
// click was not within stuff's elements
}
【问题讨论】:
-
你需要掌握jQuery的.on(),尤其是它的
.on(events, selector, handler)形式。注意selector的存在。鉴于您目前的理解水平,您应该几乎立即明白这一点。
标签: javascript jquery jquery-ui jquery-ui-datepicker