微信小程序 防止重復(fù)點擊或請求 出現(xiàn)問題
共計兩種方法 個人推薦方法2
方法1 全局設(shè)置方法 在需要的頁面單獨控制
app.js
globalData: {
PageActive: true
},
// 防止重復(fù)點擊事件
preventActive (fn) {
const self = this
if (this.globalData.PageActive) {
this.globalData.PageActive = false
if (fn) fn()
setTimeout(() => {
self.globalData.PageActive = true
}, 1500); //設(shè)置該時間內(nèi)重復(fù)觸發(fā)只執(zhí)行第一次卿拴,單位ms秒际,按實際設(shè)置
} else {
console.log('重復(fù)點擊或觸發(fā)')
}
}
index.js
// getApp() 是全局方法
getBtn:function(){
getApp().preventActive(()=>{
ajax('/pages/index', {
data:{
id:this.data.id
},
}, res => {
if(res.code == 0){
console.log(res,'1500秒后再次點擊才生效')
}
})
})
}
方法2
1.執(zhí)行請求時使用wx.showLoading
util.js文件
function showLoading(message) {
if (wx.showLoading) {
// 基礎(chǔ)庫 1.1.0 微信6.5.6版本開始支持懒豹,低版本需做兼容處理
wx.showLoading({
title: message,
mask: true
});
} else {
// 低版本采用Toast兼容處理并將時間設(shè)為20秒以免自動消失
wx.showToast({
title: message,
icon: 'loading',
mask: true,
duration: 20000
});
}
}
function hideLoading() {
if (wx.hideLoading) {
// 基礎(chǔ)庫 1.1.0 微信6.5.6版本開始支持芍瑞,低版本需做兼容處理
wx.hideLoading();
} else {
wx.hideToast();
}
}
index.js文件(需要的js文件)
function request() {
util.showLoading('加載中...');
ajax('/pages/index', {
data:{
id:this.data.id
},
}, res => {
util.hideLoading()
if(res.code == 0){
console.log(res,'返回值')
}
})
}
2.頁面跳轉(zhuǎn)時捍壤,由于小程序的頁面跳轉(zhuǎn)并不是很快换途,可以選擇用加載框暗挑,也可以限制按鈕或控件的點擊間隔的方式處理(更合適)
util.js文件
function buttonClicked(self) {
self.setData({
buttonClicked: true
})
setTimeout(function () {
self.setData({
buttonClicked: false
})
}, 500)
}
index.js
Page({
data: {
buttonClicked: false
},
click: function (e) {
util.buttonClicked(this);
var id = e.currentTarget.dataset.id;
wx.navigateTo({
url: '../detail/detail?id=' + id
})
},
})
或
直接wxml中判斷蝗肪,不需要在index.js中操作
index.wxml
<view bindtap="{{!buttonClicked?'click':''}}" data-id="{{id}}" />
<button bindtap="{{!buttonClicked?'click':''}}" data-id="{{id}}" />
<button bindtap="click" disabled="buttonClicked" data-id="{{id}}" />