解决layui前端动态设置radio、checkbox默认选项的解决方案

  • Post author:
  • Post category:其他

前几天接触一个二次开发,后台UI用的是layui框架,程序原来的TAG标签设置中自由输入的,想修改为单选。这样子的功能用于,一个产品属于两种分类的作法。第一种就是系统自带的产品分类,第二种使用标签来实现。然尔一个产品并不需要同时属于两个以上的标签,所以二次开发修改为单选radio,而不是多选checkbox。

不过本文作出的动态设置选中状态单选与多选的作法是一致的。

在前端模板文件中,普通用到的是使用<if condition=””></if>来作判断。但是奇怪的就是layui并不能识别。

第一次尝试:

<input class='layui-input' type='radio' name='tag' title='正常' value='正常' <if condition="">checked</if>>

发现在input包括中无法解析到if判断语句;当然在普通情况下是可以的,中不过程序使用了layui,因为layui通过js识别所有表单元素,重新编译了。所以在js的重新编译中无法识别原本不属于表无素材的标签。

第二次尝试:

<if condition="">

<input class='layui-input' type='radio' name='tag' title='正常' value='正常' checked>

<else/>

<input class='layui-input' type='radio' name='tag' title='正常' value='正常'>

</if>

以上代码确定可以选中状态,但随之又有其它问题随之而来,选中的与未选中的两个均会显示出来,为什么呢?

原因还是在于layui遍历form里的表单元素,并不会因if语句的存在而作出最终结果。而是识别到有两个input。

第三次尝试,不用radio,不就是单选吗?下拉单项也是可以的,使用<select>又测试了一番。同样会出现以上两个问题。

无办法下只能求助于神奇的百度给出了这样的结果;

$("input[name=tag][value=正常]").prop("checked","true");

form.render();

prop() 方法设置或返回被选元素的属性和值。

当该方法用于返回属性值时,则返回第一个匹配元素的值。

当该方法用于设置属性值时,则为匹配元素集合设置一个或多个属性/值对。

render()就是重新渲染对象;

看到这里很多朋友以为问题已经得到解决了,其实问题才刚刚开始。不是提示form对象找不到,就是提示form中找不到render()方法。为什么呢,整套程序不是doem,它还整合了很多其它的框架和插件,调作起来并不像官方给出的这么直接。

form.render();

$form.render();

form().render();

.layui.form().render();

……

通通试了一篇,还是不行,这东西就有这么折腾。累了中途休息一下。

一觉睡醒,阔然开朗。先来看看完成后的代码。

thistag="{$info.tag}";//读后台数据值

var mytag=new Array("无","第一项","第二项","第三项","第四项","第五项");//所有单选项目

cntag="";

for(j = 0,len=mytag.length; j < len; j++) { //遍历数组

if(thistag==mytag[j]){ //判断是否选中

cntag+="<input class=\'layui-input\' type=\'radio\' name=\'tag\' id=\'tag\' title=\'"+newtit+"\' value=\'"+mytag[j]+"\' checked>";

}else{

cntag+="<input class=\'layui-input\' type=\'radio\' name=\'tag\' id=\'tag\' title=\'"+newtit+"\' value=\'"+mytag[j]+"\' >";

}

}

$("#cntag").html(cntag); //打印到网页中显示最终效果

优点:只读一次后面数据;

简化:就算单选项很多,只需写在一个数组中即可。

简单:只需写一次判断语句;

原理既然是前端使用,多用js,少用<if><php>这些php后端定义的标签。