作小程序的時候,產品提出模板消息推送用服務通知的方式推送(正常狀況是用公衆號推送),而後去查小程序手冊,發現服務通知存在着問題:(7天有效期)支付等方式只能夠獲取3個formID,推送3條模板消息,表單提交方式一次提交只能獲取一個formIdm推送一條通知。產品要求一次生成50個formId,以在7天內有50個formI的能夠用來推送消息。這就有一個問題,如何在點擊推送的時候提交50次form表單呢?試了不少方法:剛開始的時候,思惟只侷限在了經過for循環的方式去動態調用formsubmit方法來提交表單,但是發現因爲formId的獲取方式是由當前表單的submit按鈕提交方法中,event對象自動生成的,若是循環調用,循環的當前方法的event對象並無變化,仍然是第一次觸發的那個提交方法的event對象,故結果就是你僅僅只是循環生成了多個同樣的formId。達不到要求,那麼如何在點擊推送的時候同時提交多個form表單呢?又試了試在頁面上同時動態生成多個表單的方式,發現小程序沒法像jq同樣append節點...,那麼好吧,我又試了同時在頁面上覆制5個表單,提交方法都同樣或不同(方法名稱遵循必定的規律,之後面動態調用),發現提交方法名相同的時候,仍然只提交了一次;換成不一樣的方法名後(如方法名字符後面按順序拼接序號),發現沒辦法調用...(沒辦法的狀況下,已經忽略了可行性,這種明顯坑本身的方式都敢來試),後來找到一個前輩的文章:傳送css
才發現了原來要同時提交多個form表單,以獲取多個不一樣的formId來發送多個消息模板通知原來還能經過另外一種方式來實現:簡單來講,就是運用css樣式重疊,讓頁面上的多個不一樣的form表單經過一次觸發,點擊事件穿透,來實現觸發多個表單的方式。
頁面上具體css效果就不貼了,直接上效果截圖:小程序
這個訂閱按鈕下面其實有50個表單的嵌套,能夠看一下wxml的截圖的冰山一角:app
即wxml的結構要遵循多個表單一層一層往內嵌套,以實現點擊事件穿透(冒泡)的結果。
css樣式(其中對button樣式的處理和前輩的樣式有區別——這說明具體的樣式是有差別的):spa
.btn{ width: 1rpx; height: 1rpx; margin: 0; padding: 0; /* position: fixed; */ /* top: 150rpx; */ border-color:transparent; border:none; background-color:transparent; } .aa{ height:68rpx; width:156rpx; position:fixed; top: 150rpx; } button::after{ border: none; }
而後submit方法中一次push如當前表單提交方法的evet的formId,具體的js方法在前輩連接中有,就不貼上了。.net
這篇文章是做爲本人遇到這個坑的一個反映與記錄。花點時間記錄分享出來,只但願能對友須要的朋友提供參考與幫助。同時感謝那位前輩的騷思路,真的學到了騷操做!code