【问题标题】:How stop `click` bubbling through an input element in an accordion header to avoid activation accordion element如何停止“点击”在手风琴标题中的输入元素冒泡以避免激活手风琴元素
【发布时间】:2015-06-02 03:48:29
【问题描述】:

我有一个 jQuery 手风琴,手风琴标题中带有 <input>。 手风琴是“可折叠的”,但我不希望在单击 <input> 时该项目展开(或折叠)。

如何阻止 click 事件通过 <input> 元素冒泡以避免激活手风琴元素?

是否有一些聪明的方法可以将event.stopPropagation();(或类似的东西)应用于手风琴beforeActivate-callback? 或者这可以直接在<input>s 数据绑定上完成吗?

来自我的 bindingHandler:

       $(element).accordion({
            header: ".accordion-header",
            collapsible: true,
            navigation: true,
            heightStyle: "content",
            active: false,

            beforeActivate: function (event, ui) {
                active = $(this).accordion("option", "active");
            },
            activate: function (event, ui) {
                event.stopPropagation(); // This obviously has no effect
            }
        })

【问题讨论】:

    标签: javascript jquery knockout.js accordion


    【解决方案1】:

    你做得对.stopPropagation()是正确的,你只是没有把它放在正确的位置,它会进入输入的点击处理程序。

    例如

    $(document).on('click', '.my-input', function(e){
         e.preventDefault();   // throw this in for good measures too
         e.stopPropigation();
    
        //  your code to handle click here
    });
    

    HTML

    <input data-bind="click: clickHandler" />
    

    淘汰赛:

    clickHandler = function(e){
            e.preventDefault();   // throw this in for good measures too
            e.stopPropigation();
    };
    

    【讨论】:

    • 我正在使用 knockoutJS 和点击绑定。那么我应该把它和我的 放在 someFunction 中(我已经在使用)还是在另一个 event: {click: someOtherFunction} 中?
    • 为您编辑的答案,请记住,不要在 HTML 中的函数之后放置 ()。这将强制它在呈现 html 时执行
    • 谢谢,Scott,但不知何故,当输入有焦点时,手风琴仍在展开/折叠。 clickHandler 被调用(用 alert(); 测试)但 e.stopPropagation 和 e.preventDefault 似乎对手风琴的行为没有影响。
    • 这可能是由于&lt;input&gt; 在渲染时不可见造成的吗? (我有一个 &lt;span data-bind=text: mytext, doubleClick: setInputVisibleAndHideThis&gt; 让它显示)。
    • 找到了! $('#myAccordionId').accordion({ beforeActivate: function (event, ui) { event.preventDefault();} });把它放在点击处理程序中可以防止手风琴激活它的内容。用 $('#myAccordionId').accordion({ beforeActivate: function (event, ui) { active = $('#accordion').accordion("option", "active" 编辑完 &lt;input&gt; 后必须重新激活); } });
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多