Wix Velo表单入库前查重:免费计划正常基础计划3下拉框校验失效求助
Wix Velo 基础计划表单校验失效修复方案
核心故障原因
- 定价计划名称匹配误差:
getPricingPlans返回的计划名称和后台配置的BASIC计划名称完全一致才会触发对应逻辑,大小写、空格、后缀字符不匹配都会导致基础计划的代码块不执行 - 事件绑定时机错位:
onBeforeSave事件绑定在getPricingPlans异步回调中执行,若dataset加载完成早于异步回调返回,事件绑定会失效 - 数据集配置错误:dataset2未正确绑定对应集合、提交按钮未关联dataset2提交操作、集合权限不足都会导致校验逻辑不触发
修复后代码
import wixData from 'wix-data'; import wixUsers from 'wix-users'; let currentPlanName = ""; // 全局存储当前用户的计划名称 $w.onReady(function () { // 提前绑定两个dataset的校验事件,根据当前计划决定是否生效 bindFreePlanValidation(); bindBasicPlanValidation(); console.log("Ready") let user = wixUsers.currentUser; user.getPricingPlans() .then ((pricingPlans) => { let firstPlan = pricingPlans[0]; currentPlanName = firstPlan.name; if (currentPlanName == '7 DAY FREE TRIAL $0'){ $w('#text30').show(); $w("#text31").show(); $w('#dropdown1').show(); $w('#emailInput').show(); $w('#button1').show(); } else if(currentPlanName == 'BASIC'){ $w('#text30').show(); $w("#text31").show(); $w('#dropdown2').show(); $w('#dropdown3').show(); $w('#dropdown4').show(); $w('#emailInput2').show(); $w('#button2').show(); } }); }); // 免费计划校验逻辑 function bindFreePlanValidation() { $w("#dataset1").onBeforeSave(async() => { // 不是免费计划直接跳过校验 if(currentPlanName !== '7 DAY FREE TRIAL $0') return true; let checkEmailFreeOk = await checkEmailFree(); let fieldCheck = $w("#dropdown1").value; if(checkEmailFreeOk === false){ $w("#text32").text = "An error occurred. You have already submitted this form"; return false } if(fieldCheck === ""){ $w("#text32").text = "An error occurred. Please select your region of interest"; return false } return true; }) } async function checkEmailFree(){ let flagFree = true await wixData.query('RegionSelectionQuizFree') .eq('email', $w("#emailInput").value) .find() .then((result)=>{ if(result.items.length > 0) flagFree = false }) return flagFree } // 基础计划校验逻辑 function bindBasicPlanValidation() { $w("#dataset2").onBeforeSave(async() => { // 不是基础计划直接跳过校验 if(currentPlanName !== 'BASIC') return true; let checkEmailBasicOk = await checkEmailBasic(); let region1 = $w("#dropdown2").value; let region2 = $w("#dropdown3").value; let region3 = $w("#dropdown4").value; const regions = new Set([region1, region2, region3]); regions.delete(""); if(checkEmailBasicOk === false){ $w("#text34").text = "An error occurred. You have already submitted this form"; return false } if (regions.size !== 3) { $w("#text34").text = "An error occurred. Please select 3 different regions of interest"; return false } return true; }) } async function checkEmailBasic(){ let flagBasic = true await wixData.query('RegionSelectionQuizBasic') .eq('email', $w("#emailInput2").value) .find() .then((result)=>{ if(result.items.length > 0) flagBasic = false }) return flagBasic }
必做检查项
- 进入Wix后台定价计划页面,确认基础计划的名称完全是
BASIC,无额外空格、大小写错误或价格后缀 - 确认dataset2的绑定集合为
RegionSelectionQuizBasic,提交按钮button2的点击事件绑定为dataset2的「保存」操作 - 确认
RegionSelectionQuizBasic集合的权限设置为「会员可创建内容」,否则提交操作会被拦截不会触发校验事件 - 确认三个下拉框的默认空值为字符串类型的空,而非占位符文本
内容的提问来源于stack exchange,提问作者Sabrina Angelo
相关产品推荐
相关产品推荐

