【问题标题】:stopPropagation is not working for select2 options in IEstopPropagation 不适用于 IE 中的 select2 选项
【发布时间】:2015-08-12 11:02:25
【问题描述】:

我正在尝试在 select2 选项列表中添加一个链接。我想绑定一个事件。它在 chrome 和 firefox 中运行良好。但它在 IE (9/10/11) 中不起作用。我尝试了所有替代方案,cancelbubble,returnValue 但没有一个有效。

当我单击带有categoryDelete 类的超链接时,它会将事件传播到 li 选项,甚至没有在 IE 中执行我的自定义 mouseup 事件。

我还在堆栈溢出中尝试了this answer。我使用 templateResult 将链接添加到 select2 选项。在上面的链接中,他们使用了formatResult。有什么区别吗?

这是我的代码。

    $("#ContentPlaceHolder1_tags").select2({
            dropdownParent: "#dropdownParent",
            placeholder: "Select category",
            templateResult: function (item) { return '<a href="javascript:;" class="categoryDelete"></a>' + item.text },
            escapeMarkup: function(m) { return m },
            allowClear: true,
            tags: true,
            closeOnSelect: false
        });


    // adding event for link inside select2 options li
    $(".categoryDelete").mouseup(function (event) {
            event = event || window.event;
            event.preventDefault();
            event.stopPropagation();
            alert("clicked delete link");

    });

【问题讨论】:

  • 试试stopImmediatePropagation()
  • 您也可以在您的情况下将return false; 用于preventDefault()stopPropagation()
  • 我也用过stopImmediatePropagation(),但没用。问题是,它甚至没有触发 IE 中的自定义事件。我什至实现了$.when().done(),以防事件在 select2 初始化之前绑定。出了点问题,我没找到。

标签: jquery jquery-select2


【解决方案1】:

您的.categoryDelete 正在动态生成,并且有不同的方法可以将事件添加到动态生成的元素中,如下所示:

$(document).on('mouseup','.categoryDelete',function (event) {
        event = event || window.event;
        event.preventDefault();
        event.stopPropagation();
        alert("clicked delete link");
});

【讨论】:

  • 这两种实现有什么区别?
  • 动态创建的元素在创建之前或在稍后附加到 DOM 时不会接受事件。因此,您需要将事件附加到文档或其父元素,以便它会在单击该特定元素时监听此事件!
  • 任何时候.. 快乐编码.. :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2013-07-23
  • 2014-01-29
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多