uni-app 未定义 ondragleave、ondrop、ondragover 和 ondragenter 事件

uni-app 未定义 ondragleave、ondrop、ondragover 和 ondragenter 事件 产品分类: uniapp/H5

信息项 内容
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 Windows11
HBuilderX类型 Alpha
HBuilderX版本号 3.2.11
浏览器平台 Chrome
浏览器版本 96
项目创建方式 HBuilderX

bug描述:

如图,原本是为了实现h5端在Windows的拖拽上传文件,结果发现这个问题,ondragleave、ondrop、ondragover和ondragenter事件未定义。这几个事件无效啊。

图片

示例代码:

<myContext ref="myContext" style="background-color: #000000;">
<textarea [@click](/user/click)="xiaochu" maxlength="1000" id="sendmsgtextarea" [@focus](/user/focus)="focusClick"
[@input](/user/input)="cecece" [@keyup](/user/keyup).enter.native="keypress(1)" [@keydown](/user/keydown).ctrl.enter.native="keypress(2)"
[@keydown](/user/keydown).ctrl.native="keypress(3)" spellcheck="false" :focus="focus" [@confirm](/user/confirm)="sendmsg"
v-model="sendcontent"
style="font-family: 'emoji';padding: 5px;width: 520px;height:50px;font-size: 14px;"
placeholder="" />
</myContext>
getTextarea() {
console.log("myContext::::::::",this.$refs.myContext)
console.log('这个是未定义:',this.$refs.myContext.ondragleave)
this.$refs.myContext.ondragleave = (e) => {
e.preventDefault()  // 阻止离开时的浏览器默认行为
console.log('阻止离开时的浏览器默认行为:',e)
}
this.$refs.myContext.ondrop = (e) => {
e.preventDefault()    // 阻止拖放后的浏览器默认行为
console.log('阻止拖放后的浏览器默认行为:',e)
const data = e.dataTransfer.files[0]  // 获取文件对象
if (data.length < 1) {
return  // 检测是否有文件拖拽到页面
}
console.log(data)
// this.upload(data)//上传文件的方法
}
this.$refs.myContext.ondragenter = (e) => {
e.preventDefault()  // 阻止拖入时的浏览器默认行为
console.log('阻止拖入时的浏览器默认行为:',e)
this.$refs.myContext.border = '2px dashed red'
}
this.$refs.myContext.ondragover = (e) => {
e.preventDefault()    // 阻止拖来拖去的浏览器默认行为
console.log('阻止拖来拖去的浏览器默认行为:',e)
}
},

操作步骤:

<myContext ref="myContext" style="background-color: #000000;">
<textarea [@click](/user/click)="xiaochu" maxlength="1000" id="sendmsgtextarea" [@focus](/user/focus)="focusClick"
[@input](/user/input)="cecece" [@keyup](/user/keyup).enter.native="keypress(1)" [@keydown](/user/keydown).ctrl.enter.native="keypress(2)"
[@keydown](/user/keydown).ctrl.native="keypress(3)" spellcheck="false" :focus="focus" [@confirm](/user/confirm)="sendmsg"
v-model="sendcontent"
style="font-family: 'emoji';padding: 5px;width: 520px;height:50px;font-size: 14px;"
placeholder="" />
</myContext>  

getTextarea() {
console.log("myContext::::::::",this.$refs.myContext)
console.log('这个是未定义:',this.$refs.myContext.ondragleave)
this.$refs.myContext.ondragleave = (e) => {
e.preventDefault()  // 阻止离开时的浏览器默认行为
console.log('阻止离开时的浏览器默认行为:',e)
}
this.$refs.myContext.ondrop = (e) => {
e.preventDefault()    // 阻止拖放后的浏览器默认行为
console.log('阻止拖放后的浏览器默认行为:',e)
const data = e.dataTransfer.files[0]  // 获取文件对象
if (data.length < 1) {
return  // 检测是否有文件拖拽到页面
}
console.log(data)
// this.upload(data)//上传文件的方法
}
this.$refs.myContext.ondragenter = (e) => {
e.preventDefault()  // 阻止拖入时的浏览器默认行为
console.log('阻止拖入时的浏览器默认行为:',e)
this.$refs.myContext.border = '2px dashed red'
}
this.$refs.myContext.ondragover = (e) => {
e.preventDefault()    // 阻止拖来拖去的浏览器默认行为
console.log('阻止拖来拖去的浏览器默认行为:',e)
}
// let sendmsgtextarea= uni.createSelectorQuery().select('#sendmsgtextarea')
// console.log('sendmsgtextarea 信息:',sendmsgtextarea)
// sendmsgtextarea.fields({context:true},res=>{
//  console.log('sendmsgtextarea context 对象:',res)
//  //监听文件拖拽移入(必须)
//      res.addEventListener('dragover', res1=>{
//          console.log('sendmsgtextarea context 对象:res1',res1)
//      }, false)
//      //监听文件拖拽移出
//      res.addEventListener('dragleave', res2=>{
//          console.log('sendmsgtextarea context 对象res2:',res2)
//      }, false)
//      //监听文件拖拽放下(必须)
//      res.addEventListener('drop', res3=>{
//          console.log('sendmsgtextarea context 对象res3:',res3)
//      }, false)
// }).exec();
// sendmsgtextarea.context(res=>{
//  console.log('sendmsgtextarea context 对象2:',res)}).exec();
},

更多关于uni-app 未定义 ondragleave、ondrop、ondragover 和 ondragenter 事件的实战教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

求助求助

更多关于uni-app 未定义 ondragleave、ondrop、ondragover 和 ondragenter 事件的实战教程也可以访问 https://www.itying.com/category-93-b0.html


着急啊

没人搭理

回复 哒哒哒兜兜风: 唉,都没人了

一个帮别人二开的项目,想不通web端为什么用uniapp

这个问题老子解决了

怎么解决 的啊

贴一下

参考: // #ifdef H5
let uploadAndSendImg = (blobUrl) => {
console.log(blobUrl);
uni.showLoading();
uniCloud.uploadFile({
filePath: blobUrl,
cloudPath: ‘/chatImg/’+this.friend_uid+Date.now()+’.jpg’,
}).then(({
fileID
}) => {
uni.hideLoading();
console.log(fileID);
this.send({
img: fileID
})
})
}

// 此事件是必须的,且要阻止默认事件
document.addEventListener(“dragover”, function(event) {
event.preventDefault();
}, false);
// 拖拽结束时触发
document.addEventListener(“drop”, e=> {
e.preventDefault(); //取消默认浏览器拖拽效果
let fileList = e.dataTransfer.files; //获取文件对象
if(fileList.length == 0){return false;}
if(fileList[0].type.indexOf(‘image’) === -1){
alert(‘您拖的不是图片!’)
return false;
}
let blobUrl = window.URL.createObjectURL(fileList[0]);
uploadAndSendImg(blobUrl)
}, false);

document.addEventListener(‘paste’, event=> {
// console.log(event);
if (event.clipboardData || event.originalEvent) {
//某些chrome版本使用的是event.originalEvent
let clipboardData = (event.clipboardData || event.originalEvent.clipboardData);
if(clipboardData.items){
// for chrome
let items = clipboardData.items,
len = items.length,
blob = null;
for (let i = 0; i < len; i++) {
// console.log(items[i]);
if (items[i].type.indexOf(“image”) !== -1) {
//getAsFile() 此方法只是living standard firefox ie11 并不支持
blob = items[i].getAsFile();
}
}
if(blob!==null){
let blobUrl=URL.createObjectURL(blob);
// console.log(blobUrl);
uploadAndSendImg(blobUrl)
}
}
}
})
// #endif

您好,你怎么解决的?

回到顶部