微信小程序?qū)崿F(xiàn)bindtap等事件傳參
之前一直以為微信小程序按鈕點擊事件傳參是和web端相同,即在事件中寫明所傳遞的參數(shù)即可,但是這樣嘗試過以后發(fā)現(xiàn)小程序的控制臺報錯,報所寫的bindtap中參數(shù)錯誤,之后百度發(fā)現(xiàn),小程序按鈕點擊這類事件時一般的處理方法是指明元素所在的id,bindtap只是寫明函數(shù)名,例如,bindtap='setNumber',而不是bindtap='setNumber(1)',在js中只要寫function(e).通過e可以獲取所傳過來元素的所有信息。
什么是事件
事件是視圖層到邏輯層的通訊方式。 事件可以將用戶的行為反饋到邏輯層進行處理。
事件可以綁定在組件上,當(dāng)達到觸發(fā)事件,就會執(zhí)行邏輯層中對應(yīng)的事件處理函數(shù)。
事件對象可以攜帶額外信息,如 id, dataset, touches。


看圖,因為需要傳遞的數(shù)據(jù)比較多,所以我們通過dataset攜帶參數(shù)信息。如果只有一個參數(shù),可以通過id來傳遞。
詳解(以常見的tap點擊事情為例)
wxml
<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>
JS
Page({
tapName: function(event) {
console.log(event)
}
})
event 打印結(jié)果
{
"type":"tap",
"timeStamp":895,
/////////////////////////////////
"target": {
"id": "tapTest",
"dataset": {
"hi":"WeChat"
}
},
"currentTarget": {
"id": "tapTest",
"dataset": {
"hi":"WeChat"
}
},
///////////////////////////////
"detail": {
"x":53,
"y":14
},
"touches":[{
"identifier":0,
"pageX":53,
"pageY":14,
"clientX":53,
"clientY":14
}],
"changedTouches":[{
"identifier":0,
"pageX":53,
"pageY":14,
"clientX":53,
"clientY":14
}]
}
注意兩點:
1、data-名稱 不能有大寫字母,如果需要,可以通過 - (中劃線)來連接單詞,編譯的時候小程序會將第二個單詞首字母自動大寫。圖中代碼是為了自己標(biāo)志,所以第二個單詞的首字母大寫了,其實可以不用。data-* 屬性中不可以存放對象。
2、注意打印結(jié)果中target和currentTarget的區(qū)別。
- target 觸發(fā)事件的源組件。
- currentTarget 事件綁定的當(dāng)前組件。
如果你在父容器上綁定了事件并傳參,當(dāng)你點擊父容器時,事件綁定的組件和觸發(fā)事件的源組件是同一個元素,所以currentTarget 、target 都可以拿到參數(shù),但是當(dāng)你點擊子元素時,target 就不是事件綁定的組件了,所以拿不到參數(shù)。
由于事件冒泡的機制,父容器上綁定的事件依然可以觸發(fā),所以currentTarget 依然可以拿到參數(shù)。
說明
id傳參和dataset類似,只是最后獲取值的時候不同。event.currentTarget.id
PS:小程序 view使用bindtap傳值問題
如圖,view標(biāo)簽 加 bindtap事件,用data-name傳值,如果view中只有文字,點擊整個view區(qū)域都可以接收到data-name的值,如果view里面加一個lable標(biāo)簽,那么點擊lable包裹的區(qū)域,data-name取不到值。 解決方法:把取值方式 由e.target.dataset.carrierName 修改為e.currentTarget.dataset.carrierName即可

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
window.location.href中url中數(shù)據(jù)量太大時的解決方法
這篇文章主要為大家介紹下window.location.href中url中數(shù)據(jù)量太大時的解決方法,需要的朋友可以參考下2013-12-12
js導(dǎo)出Excel表格超出26位英文字符的解決方法ES6
下面小編就為大家?guī)硪黄猨s導(dǎo)出Excel表格超出26位英文字符的解決方法ES6。具有很好的參考價值。一起跟隨小編過來看看吧,希望對大家有所幫助2017-11-11

