1. 程式人生 > >微信小程式-bindtap等事件傳參

微信小程式-bindtap等事件傳參

什麼是事件

事件是檢視層到邏輯層的通訊方式。 事件可以將使用者的行為反饋到邏輯層進行處理。
事件可以繫結在元件上,當達到觸發事件,就會執行邏輯層中對應的事件處理函式。
事件物件可以攜帶額外資訊,如 id, dataset, touches。

這裡寫圖片描述

這裡寫圖片描述

看圖,因為需要傳遞的資料比較多,所以我們通過dataset攜帶引數資訊。如果只有一個引數,可以通過id來傳遞。

詳解(以常見的tap點選事情為例)

wxml

<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>

JS

Page({
  tapName: function(event) {
    console.log(event)
  }
})

event 列印結果

{
"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-名稱 不能有大寫字母,如果需要,可以通過 - (中劃線)來連線單詞,編譯的時候小程式會將第二個單詞首字母自動大寫。圖中程式碼是為了自己標誌,所以第二個單詞的首字母大寫了,其實可以不用。data-* 屬性中不可以存放物件。

2、注意列印結果中targetcurrentTarget的區別。

target 觸發事件的源元件。
currentTarget 事件繫結的當前元件。

如果你在父容器上綁定了事件並傳參,當你點選父容器時,事件繫結的元件和觸發事件的源元件是同一個元素,所以currentTarget 、target 都可以拿到引數,但是當你點選子元素時,target 就不是事件繫結的元件了,所以拿不到引數。
由於事件冒泡的機制,父容器上繫結的事件依然可以觸發,所以currentTarget 依然可以拿到引數。

說明

id傳參和dataset類似,只是最後獲取值的時候不同。event.currentTarget.id