AEM as a Cloud Service:對話方塊提交會略過使用自訂指令碼的必填欄位驗證
本文說明如何在Adobe Experience Manager as a Cloud Service中解決即使必填欄位未填寫(通常是因為自訂使用者端指令碼覆寫標準驗證)也可能會提交元件對話方塊的問題。
說明 description
環境
Adobe Experience Manager as a Cloud Service (AEMaaCS)和AEM SDK環境。
症狀
- 元件對話方塊包含具有自訂驗證的文字欄位,以及標籤為 必要 的路徑欄位。
- 在AEM SDK環境中,如果必填欄位空白或驗證失敗,則無法提交對話方塊。
- 在AEM as a Cloud Service環境中,即使必填欄位未填寫或驗證失敗,對話方塊仍允許提交。
- 自訂驗證器會顯示其錯誤訊息,但按一下 完成 按鈕仍會提交表單。
欄位設定範例:
<alt
jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/coral/foundation/form/textfield"
validation="testing.test"
fieldDescription="Alternative text for image"
fieldLabel="Alt text"
name="./alt"/>
<linkURL
jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/coral/foundation/form/pathfield"
required="{Boolean}true"
fieldDescription="Link"
fieldLabel="Link"
name="./linkURL"/>
原因
自訂使用者端驗證指令碼會註冊 對話方塊提交 按鈕的全域點選處理常式。 此處理常式會攔截所有對話方塊提交,並直接提交表單,略過標準Granite UI驗證。 因此,即使必填欄位空白或自訂驗證失敗,也會提交對話方塊。
解決方法 resolution
請依照下列步驟解決問題:
- 檢閱您的自訂使用者端驗證指令碼,尤其是註冊對話方塊提交的事件處理常式(例如 對話方塊提交 按鈕的處理常式)。
- 確保任何自訂處理常式只會攔截目標對話方塊或欄位的提交(例如,在動作前先檢查特定的多欄位或對話方塊內容)。
- 重構處理常式,以便只有在確認處理常式正在處理預期的對話方塊之後,才會呼叫
e.stopPropagation()和e.preventDefault()。 針對所有其他對話方塊,允許AEM的標準驗證和提交流程在不干擾的情況下繼續。 - 移除任何直接提交表單給預期對話方塊以外的對話方塊的遞補邏輯。
- 重新部署您的應用程式。
- 確認現在未填寫必填欄位或驗證失敗時,對話方塊提交已正確封鎖。
recommendation-more-help
experience-cloud-kcs-help-kbarticles