如何根据AJAX返回值动态设置控件的RequiredField属性?
解决方案
你只需要在AJAX回调的成功函数里,在控制liGid可见性的同时,补充对应必填状态的设置逻辑就行。下面分两种常见场景给出调整后的代码:
场景1:使用UI框架自带的必填设置API
如果你的fytbTab0所属的UI框架提供了设置必填状态的方法(比如类似SetRequired()这类API),可以直接在显示liGid时调用它,隐藏时取消必填:
$.ajax({ type: "POST", url: "TestPage.aspx/GetCode", data: '{"XKod":"' + s.GetValue().toString() + '"}', contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { const liGidItem = fytbTab0.GetItemByName('liGid'); if (msg.d.GrupKodu == 3 || msg.d.GrupKodu == 5) { liGidItem.SetVisible(true); // 设置为必填字段,根据框架实际API调整方法名 liGidItem.SetRequired(true); } else { liGidItem.SetVisible(false); // 取消必填状态 liGidItem.SetRequired(false); } } });
场景2:原生HTML表单元素处理
如果liGid是包含原生<input>/<select>等表单元素的容器,你可以直接定位到内部的表单控件,通过操作required属性来控制必填状态:
$.ajax({ type: "POST", url: "TestPage.aspx/GetCode", data: '{"XKod":"' + s.GetValue().toString() + '"}', contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { const liGidItem = fytbTab0.GetItemByName('liGid'); // 假设liGid内部的表单控件是input,选择器根据实际结构调整 const formControl = liGidItem.GetElement().querySelector('input[name="GidInput"]'); if (msg.d.GrupKodu == 3 || msg.d.GrupKodu == 5) { liGidItem.SetVisible(true); // 添加必填属性 formControl.setAttribute('required', 'required'); // 可选:添加输入提示 formControl.setAttribute('title', '此字段为必填项'); } else { liGidItem.SetVisible(false); // 移除必填属性 formControl.removeAttribute('required'); } } });
额外提示
如果你的页面使用了第三方验证插件(比如jQuery Validation),记得在动态修改必填状态后,手动触发验证规则的更新,比如调用$.validator.unobtrusive.parse()来让插件识别新的必填设置,避免提交时出现验证遗漏。
内容的提问来源于stack exchange,提问作者F K
相关产品推荐
相关产品推荐

