其中有一個字段是status,使用radio來做,發(fā)現(xiàn)無法賦值(賦值后無法顯示當前選中)
查看layui文檔、詢問chatgpt后:
嘗試手動賦值渲染
document.querySelector('input[name="status"][value="' + res.data[0].status + '"]').checked = true;
form.render('radio');
這樣是渲染當前項了,但是切換選中項不會隨著改變,form提交時也無法正確獲取選中項的值(永遠是那個初始值)。
select元素也試了下,也是有類似的問題。
大概率是由于我不熟悉layui導致的(沒道理一個框架對于這種最基本的東西都這么難用),請問一下對于這種情況應該怎么正確處理?
<div class="layui-form-item">
<label class="layui-form-label">狀態(tài)</label>
<div class="layui-input-block">
<input type="radio" name="status" value="1" title="正常" />
<input type="radio" name="status" value="2" title="禁用" />
<input type="radio" name="status" value="3" title="連接異常" />
</div>
</div>
由于沒有找到統(tǒng)一的方案,只能針對這個情況手動處理一下
// 前面是ajax獲取數(shù)據(jù),下面代碼是在ajax的success中的處理
// 給表單初始化數(shù)據(jù)
layui.each(res.data[0], function (key, value) {
let obj = $('*[name="'+key+'"]');
if (key === "password") {
obj.attr("placeholder", "不更新密碼請留空");
return;
}
if (typeof obj[0] === "undefined" || !obj[0].nodeName) return;
if (obj[0].nodeName.toLowerCase() === "textarea") {
obj.val(value);
}
// 針對radio特殊處理
else if ($(obj[0]).is(':radio')) {
$('input[type="radio"][name="' + key + '"][value="' + value + '"]').attr('checked', true);
}
else {
obj.attr("value", value);
obj[0].value = value;
}
});
form.render();
其實就是針對radio做個特殊處理,然后要注意的就是一定不要忘了 form.render()
,不寫這個是無法正確渲染出radio的選中項的。
然后試了一下select下拉框,只要加上了 form.render()
,無需特殊處理就能正常使用。