国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

微信小程序?qū)崿F(xiàn)bindtap等事件傳參

2019-11-19 11:51:34
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

之前一直以為微信小程序按鈕點(diǎn)擊事件傳參是和web端相同,即在事件中寫(xiě)明所傳遞的參數(shù)即可,但是這樣嘗試過(guò)以后發(fā)現(xiàn)小程序的控制臺(tái)報(bào)錯(cuò),報(bào)所寫(xiě)的bindtap中參數(shù)錯(cuò)誤,之后百度發(fā)現(xiàn),小程序按鈕點(diǎn)擊這類事件時(shí)一般的處理方法是指明元素所在的id,bindtap只是寫(xiě)明函數(shù)名,例如,bindtap='setNumber',而不是bindtap='setNumber(1)',在js中只要寫(xiě)function(e).通過(guò)e可以獲取所傳過(guò)來(lái)元素的所有信息。

什么是事件

事件是視圖層到邏輯層的通訊方式。 事件可以將用戶的行為反饋到邏輯層進(jìn)行處理。

事件可以綁定在組件上,當(dāng)達(dá)到觸發(fā)事件,就會(huì)執(zhí)行邏輯層中對(duì)應(yīng)的事件處理函數(shù)。

事件對(duì)象可以攜帶額外信息,如 id, dataset, touches。

看圖,因?yàn)樾枰獋鬟f的數(shù)據(jù)比較多,所以我們通過(guò)dataset攜帶參數(shù)信息。如果只有一個(gè)參數(shù),可以通過(guò)id來(lái)傳遞。

詳解(以常見(jiàn)的tap點(diǎn)擊事情為例)

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}]}

注意兩點(diǎn):

1、data-名稱 不能有大寫(xiě)字母,如果需要,可以通過(guò) - (中劃線)來(lái)連接單詞,編譯的時(shí)候小程序會(huì)將第二個(gè)單詞首字母自動(dòng)大寫(xiě)。圖中代碼是為了自己標(biāo)志,所以第二個(gè)單詞的首字母大寫(xiě)了,其實(shí)可以不用。data-* 屬性中不可以存放對(duì)象。

2、注意打印結(jié)果中target和currentTarget的區(qū)別。

  • target 觸發(fā)事件的源組件。
  • currentTarget 事件綁定的當(dāng)前組件。

如果你在父容器上綁定了事件并傳參,當(dāng)你點(diǎn)擊父容器時(shí),事件綁定的組件和觸發(fā)事件的源組件是同一個(gè)元素,所以currentTarget 、target 都可以拿到參數(shù),但是當(dāng)你點(diǎn)擊子元素時(shí),target 就不是事件綁定的組件了,所以拿不到參數(shù)。
由于事件冒泡的機(jī)制,父容器上綁定的事件依然可以觸發(fā),所以currentTarget 依然可以拿到參數(shù)。

說(shuō)明

id傳參和dataset類似,只是最后獲取值的時(shí)候不同。event.currentTarget.id

PS:小程序 view使用bindtap傳值問(wèn)題

如圖,view標(biāo)簽 加 bindtap事件,用data-name傳值,如果view中只有文字,點(diǎn)擊整個(gè)view區(qū)域都可以接收到data-name的值,如果view里面加一個(gè)lable標(biāo)簽,那么點(diǎn)擊lable包裹的區(qū)域,data-name取不到值。  解決方法:把取值方式  由e.target.dataset.carrierName  修改為e.currentTarget.dataset.carrierName即可

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 梨树县| 章丘市| 任丘市| 资兴市| 大冶市| 泊头市| 青州市| 余江县| 太康县| 瓮安县| 林芝县| 盱眙县| 太保市| 格尔木市| 井冈山市| 廊坊市| 贡山| 石嘴山市| 茌平县| 将乐县| 章丘市| 五台县| 泽州县| 巴彦淖尔市| 吕梁市| 桦甸市| 卫辉市| 新昌县| 容城县| 定州市| 安阳县| 华阴市| 南召县| 神池县| 依兰县| 盐边县| 聂荣县| 广西| 大城县| 定南县| 襄垣县|