其中有一個(gè)字段是status,使用radio來(lái)做,發(fā)現(xiàn)無(wú)法賦值(賦值后無(wú)法顯示當(dāng)前選中)
查看layui文檔、詢問(wèn)chatgpt后:
嘗試手動(dòng)賦值渲染
document.querySelector('input[name="status"][value="' + res.data[0].status + '"]').checked = true;
form.render('radio');
這樣是渲染當(dāng)前項(xiàng)了,但是切換選中項(xiàng)不會(huì)隨著改變,form提交時(shí)也無(wú)法正確獲取選中項(xiàng)的值(永遠(yuǎn)是那個(gè)初始值)。
select元素也試了下,也是有類似的問(wèn)題。
大概率是由于我不熟悉layui導(dǎo)致的(沒(méi)道理一個(gè)框架對(duì)于這種最基本的東西都這么難用),請(qǐng)問(wèn)一下對(duì)于這種情況應(yīng)該怎么正確處理?
<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>
由于沒(méi)有找到統(tǒng)一的方案,只能針對(duì)這個(gè)情況手動(dò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", "不更新密碼請(qǐng)留空");
return;
}
if (typeof obj[0] === "undefined" || !obj[0].nodeName) return;
if (obj[0].nodeName.toLowerCase() === "textarea") {
obj.val(value);
}
// 針對(duì)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();
其實(shí)就是針對(duì)radio做個(gè)特殊處理,然后要注意的就是一定不要忘了 form.render()
,不寫這個(gè)是無(wú)法正確渲染出radio的選中項(xiàng)的。
然后試了一下select下拉框,只要加上了 form.render()
,無(wú)需特殊處理就能正常使用。