Firefox:无法拖动 <a> 超链接的 child 元素

Firefox: Unable to Drag element child of <a> hyperlink

考虑以下标记:

<a class="link" href="#">
    <sup draggable="true">Foo</sup> Bar
</a>

现在将 dragstart 事件附加到 sup 元素:

$(document).ready(function () {
    $("sup").on('dragstart', function(e) {
        console.log('shikaka');
    });
});

此事件永远不会触发。我一直在研究,在 Firefox 中,默认情况下链接是可拖动的,所以我认为这可能有效:

$(document).ready(function () {
    $(".link").on('dragstart', function(e) {
         e.preventDefault();
         e.stopPropagation;
         //event return false; does not work.
    });

    $("sup").on('dragstart', function(e) {
        console.log('shikaka');
    });
});

而且,<a class="link" href="#" draggable="false"> 也没有用。

我什至尝试了一些 "crazy" 东西,比如将事件触发到 child:

$(".link").on('dragstart', function (e) {
    e.preventDefault();
    e.stopPropagation;
    $(this).find('sup').trigger('dragstart');
});

互联网上有一些 post 表明您也可以通过取消 mousedown 事件来禁用该事件。上面的任何例子都用 dragentermousedown 进行了尝试,并且都产生了相同的效果。

我的问题是,有什么方法可以 "short circuit" firefox 中的默认事件,使其触发 child 元素的事件吗?或者,有没有办法只阻止 parent 事件但仍然能够拖动 child 元素?

我正在测试它,如果你从 <a> 标签中删除 href 属性,它就不再可以拖动,事件也不会触发,如果你想两个可拖动元素都向其添加属性 draggable === true,然后拖动事件将在 <a> 和子元素中触发。

我仍然需要 <a> 标签中 href 属性的数据,您可以将其添加为另一个属性,如 data-href 或类似的。

您可以在下面的代码片段中尝试。

document.getElementById('a').addEventListener('dragstart', function() {
  console.log('Dragging a link…');
});

document.getElementById('span').addEventListener('dragstart', function() {
  console.log('Dragging a span…');
});
<a id="a" draggable="true">
  <div id="span" draggable="true">and some more text</div>
</a>