gpt4 book ai didi

jQuery 1.6.2 绑定(bind)不再对拖动事件起作用?

转载 作者:行者123 更新时间:2023-12-01 06:39:27 24 4
gpt4 key购买 nike

我尝试将 .bind()'dragenter''dragover''drop' 这样我就可以将文件从桌面拖到浏览器中。

请参阅附件 jsfiddle。 http://jsfiddle.net/v82An/23/

$(function(){
function dragenter(e) {
e.stopPropagation();
e.preventDefault();
}
function dragover(e) {
e.stopPropagation();
e.preventDefault();
}
function drop(e) {
e.stopPropagation();
e.preventDefault();
alert('hi')
}

$('#drop').bind('dragenter', dragenter, false);
$('#drop').bind('dragover', dragover, false);
$('#drop').bind('drop', drop, false);
});

这个 fiddle 在 1.5 中正确附加了这些事件,但在 1.6 中它们根本不起作用。

有人知道我是否做错了吗?

最佳答案

如果您不将 preventBubble 设置为 false,它似乎会起作用:

$('#drop').bind('dragenter', dragenter);
$('#drop').bind('dragover', dragover);
$('#drop').bind('drop', drop);

DEMO

更新:如果您查看documentation ,传递三个参数,其中最后一个是 bool 值,解释为:

.bind( eventType, [eventData], preventBubble )

这意味着该处理程序不用作事件处理程序,而是用作事件数据。

不过他们改变了检测处理程序的方式。在 jQuery 1.5.2 ,它是:

if ( jQuery.isFunction( data ) || data === false ) {
fn = data;
data = undefined;
}

你看,当第二个参数是一个函数时,那么这个函数被用作事件处理程序(而不是第三个)。

但它在 jQuery 1.6.2 中发生了变化至:

if ( arguments.length === 2 || data === false ) {
fn = data;
data = undefined;
}

现在只测试传递了多少个参数。在您的情况下,data不是false(它是一个函数)并且您传递了三个参数,fn不会改变。它保持false

当处理程序为 false 时,then this happens :

if ( handler === false ) {
handler = returnFalse;
} else if ( !handler ) {
// Fixes bug #7229. Fix recommended by jdalton
return;
}

因此,这实际上可以被视为 jQuery 1.5 中的错误,现已修复,并且不是这些特定事件的问题。

关于jQuery 1.6.2 绑定(bind)不再对拖动事件起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7168396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com