JQuery UI 日期选择器的下一个和上一个按钮只有一个祖先。 $(e.target).parents() 只返回一个元素

2024-03-06

我还没有足够的代表来发布我自己的答案,但在我浪费更多人的时间之前:

好吧,我现在明白为什么我没有得到所有预期的祖先:

JQuery datepicker删除父节点(datepicker-head) 单击。在那之后我的事件是在按钮上触发的 已经被删除的元素。所以现在我被“困”在范围内 被删除元素的位置,只能遍历到被删除的元素 容器本身。我想我可以为我的问题找到一个解决方案 具有这些知识的事件委托!

我将在 8 小时内将此添加为我的问题的正确答案! ;)

原来的问题/问题: 我已经在 stackoverflow、google 等上彻底搜索过这个问题,但似乎找不到解决方案。

我对这个问题快要疯了: 我在一个容器中有一个 JQuery UI Datepicker,如果您在容器外部单击,该容器就会隐藏。 这意味着我需要知道容器内何时有交互,这样容器就不会关闭!在 document.click 上,我从给定元素向上遍历以查找封闭容器(或满足任何其他条件)以允许该操作或拒绝该操作。 这就像一个魅力 - 也可以点击生成的日期选择器工作,除了“下个月”和“上个月”按钮。 在下面的小提琴中,我记录了单击元素的 .parents() 。 请注意,如果单击“下一个”和“上一个”按钮,则 document.click 将执行,关闭容器,并且日志将仅显示按钮的直接父级。 如果您单击日期选择器中的其他元素,您将看到 .parents() 将为您提供直到封闭的 html 标签为止的所有元素。

有谁知道如何解决这个问题?

我做了一个简单的例子来展示这一点...... 这是 HTML:

<div class="container">
    <input type="text" class="myToggleInput" />
    <div class="toggleContainer" style="display: none">
        <div class="myDatepicker"></div>
    </div>
</div>

这是脚本:

$(document).ready(
    init()
);

function init() {
    $('.myDatepicker').datepicker();
    $(document).on('click', '.myToggleInput', function(e) {
        $('.toggleContainer').show();
    });

    $(document).on('click', function(e) {
        //Logging the targets parents
        //Note that the next and prev buttons only go up one level in the DOM Tree, thus
        //not returning all of their parents...
        console.log($(e.target).parents());
        if ($(e.target).parents('.toggleContainer').length == 0 && !$(e.target).hasClass('myToggleInput')) {
            $('.toggleContainer').hide();
        }
    });
};

这是小提琴:http://jsfiddle.net/Px9Ab/ http://jsfiddle.net/Px9Ab/

澄清: 是的,我可以将下一个/上一个按钮的类添加到我的条件中,但我更喜欢一个通用的解决方案,因此我可以确保 '$(e.target).parents()' 始终遍历到html 节点。

为什么我不能使用 stoppropagation: 这个容器和网站的其余部分内发生了很多动态的事情。 例如,我正在根据所选日期重新加载元素列表,这些元素还附加有事件,或者更确切地说,也委托给文档。这就是为什么我无法停止容器上的传播。

也欢迎任何其他完全绕过我的问题的解决方案! :)


JQuery datepicker 在单击时删除父节点(datepicker-head)。之后,我的事件在已删除元素的按钮上触发。所以现在我“被困”在已删除元素的范围内,只能遍历到已删除容器本身。

为了解决我最初的问题,我必须过滤掉所有不会冒泡的可点击元素。

Eg:

$(document).on('click', function(e) {
    if (!$(e.target).hasClass('ui-dialog')) {
        window.XYZ.hideAllDatePickersPseudoMethod();
    }
});

我知道这更像是一种解决方法,而不是解决问题,但这是我想出的唯一满足我所有需求的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JQuery UI 日期选择器的下一个和上一个按钮只有一个祖先。 $(e.target).parents() 只返回一个元素 的相关文章

随机推荐