使用 HTML5 拖放防止拖动事件干扰 Firefox 中的输入

时间:2023-04-29
本文介绍了使用 HTML5 拖放防止拖动事件干扰 Firefox 中的输入元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时送ChatGPT账号..

似乎输入元素在放入具有可拖动=真"的元素时失去了很多功能.这似乎只发生在 Firefox 中.

It seems that an input element loses a lot of functionality when put into an element with draggable="true". This only seems to occur in firefox.

查看我的 jsfiddle:http://jsfiddle.net/WC9Fe/3/

See my jsfiddle: http://jsfiddle.net/WC9Fe/3/

HTML:

<div id="drag" draggable="true">
    Drag this div <br />
    <input id="message" type="text" />
</div>
<div id="drop">
    Drop area
</div>

JS:

$('#drag').on('dragstart', function(e){
    e.originalEvent.dataTransfer.setData('Text', $('#message').val());
    e.originalEvent.dataTransfer.effectAllowed = 'move';
});

var drop = $('#drop');
drop.on('dragover', function(e){
    e.preventDefault();
});
drop.on('dragenter', function(e){
    e.preventDefault();
});
drop.on('drop', function(e){
    alert('Target succesfully dropped: ' + e.originalEvent.dataTransfer.getData('Text'));
    e.preventDefault();
});

现在尝试使用 firefox 在输入中选择文本.似乎不可能.在 IE/Chrome 中尝试相同的操作.似乎工作得很好.

Now try to select text in the input using firefox. Seems impossible. Try the same in IE/Chrome. Seems to work just fine.

推荐答案

据我所知,这是 FF 中的一个已知错误.一个快速(和dirty"的解决方法)是删除文本输入 focus 事件上的 draggable 属性,再次将其添加到文本输入 blur 事件,并禁用#drag div 上的文本选择,以便在您单击焦点输入外部时启用拖动(直接单击#div).

As far as I know this is a known bug in FF. A quick (and "dirty" workaround) would be to remove the draggable attribute on text input focus event, add it again on text input blur event, and disable text selection on #drag div to enable dragging once you clicked outside the focused input (clicking on #div directly).

更新小提琴这里.

示例代码:

JS:

$('#message')
    .on('focus', function(e) {
        $(this).closest('#drag').attr("draggable", false);
    })
    .on('blur', function(e) {
        $(this).closest('#drag').attr("draggable", true);
    });

CSS:

.disable-selection {
    /* event if these are not necessary, let's just add them */
    -webkit-user-select: none;
    -ms-user-select: none;
    user-select: none;

    /* this will add drag availability once you clicked the 
       #drag div while you're focusing #message div */
    -moz-user-select: none;
}

希望对你有帮助.

这篇关于使用 HTML5 拖放防止拖动事件干扰 Firefox 中的输入元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

上一篇:如何使用 JavaScript 暂时禁用文本选择? 下一篇:如何检测浏览器支持文件 API 拖放

相关文章

最新文章