使用 PHP 解决下拉框无数据 回填问题

本文探讨了一种解决在特定权限下,值班日志编辑时下拉框无法回填已选数据的问题。通过巧妙利用HTML结构和PHP的Empty标签,实现了既满足表单提交需求又能正确显示已有数据的解决方案。

首先来说说今天遇到的问题吧
项目里的一个值班日志,在今天开完会之后改了改,发现了问题。
这个逻辑是这样的:值班排班的时候可以选择多个人员值班,但是每个用户登录的时候只可以写自己的值班日志,也就只能看到自己的信息。
所以在选择值班数据的时候,下拉框里只会显示自己的数据。
于是添加的时候下拉框是有一条数据的,但是添加完日志后,因为权限问题,只能当前用户在当前日期添加一条日志,以至于编辑的时候下拉框没有数据,就导致回填不了当前值班日期的数据。
回填的时候下拉框没有数据,要求回填当前日期
可是select下拉框没有数据却要回填一个数据,试了好多方法都不可行。

失败案例如下:

var currentday = getCurrentDate()
$("#dutyid").text(currentday);
// $("#dutyid").html('<option>' + currentday + '</option>').trigger("change");

//获得系统当前日期(七天前日期)
function getCurrentDate(condition){
	var d= new Date();
	var year=d.getFullYear();
	var mon=d.getMonth()+1;
	var day=d.getDate();
	s=year+"-"+(mon<10?"0"+mon:mon)+"-"+(day<10?"0"+day:day);
	return s;
}

心里想着,要是有一个即是输入框又是下拉框的东西就好了,好吧,那不就是判断嘛,直接在html里判断~~

成功示例代码如下:

<div class="form-group" >
    <label for="dutyid" class="col-xs-4 control-label">
        值班日期:
    </label>
    <div class="col-xs-8">
        <empty  name="ITEM:id">
                <select class="form-control"  name="dutyid" id="dutyid" required></select>    
            <else/>
                <!-- 用于存储 -->
                <input name="dutyid" value='{$ITEM->dutyid}' type="hidden">
                <!-- 用于回填 -->
                <input class="form-control"  id="dutyid" value='{$ITEM->dutyid}' required readonly>                                   
        </empty>          
    </div>
</div>        

终于看到想要的结果了

然后form表单提交的时候需要的value值和回填显示的value值不一样
就写了两个input输入框,一个用于显示,一个用于提交数据(隐藏)

下面贴上PHP 的 Empty标签,啦啦啦~~
empty标签用于判断某个变量是否为空,用法:

<empty name="name">
name为空值
</empty>

如果判断没有赋值,可以使用:

<notempty name="name">
name不为空
</notempty>

可以把上面两个标签合并成为:

<empty name="name">
name为空
<else /> 
name不为空
</empty> 

name属性可以直接使用系统变量,例如:

<empty name="Think.get.name">
$_GET['name']为空值
</empty>
  • 更多 PHP 相关知识参考 这儿.
  • 作为一个菜鸡小前端,刚刚接触PHP,所以很多都不太懂啦~~
要实现layui table下拉框触发数据回填,可参考以下步骤与代码思路:实现时需新建一个方法`layuiSelect`来绑定下拉框回填数据,利用`ajax`异步传递数据,在请求成功后的回调函数里处理数据,最后用`layui.form.render("select")`重新渲染下拉框。 ### 代码示例 ```javascript // layui创建下拉框 function layuiSelect(selectId, url, value) { $.ajax({ url: url, dataType: 'json', type: 'post', success: function (data) { if (selectId.indexOf('#') != 0) { selectId = '#' + selectId; } $(selectId).empty(); $(selectId).append(new Option("", 0)); $.each(data, function (index, item) { $(selectId).append(new Option(item.text, item.id)); // 下拉菜单里添加元素 }); // 设置选中值 if (value != undefined && value != null && value != '') { $(selectId).val(value); } layui.form.render("select"); // 重新渲染 固定写法 } }); } // 假设这里是表格的渲染 layui.use(['table', 'form'], function () { var table = layui.table; var form = layui.form; table.render({ elem: '#test' , url: 'your_api_url' , cols: [[ { field: 'id', title: 'ID' } , { field: 'name', title: 'Name' } , { title: 'Select', templet: function (d) { return '<select id="select_' + d.id + '" name="select_' + d.id + '" lay-verify="required" lay-filter="select_filter"><option value=""></option></select>'; } } ]] , done: function (res, curr, count) { // 表格渲染完成后,为每个下拉框绑定数据 res.data.forEach(function (item) { layuiSelect('select_' + item.id, 'your_data_url', item.selectedValue); }); } }); // 监听下拉框的选择事件 form.on('select(select_filter)', function (data) { var selectId = data.elem.id; var selectedValue = data.value; // 这里可以根据选中的值进行数据回填操作 // 例如更新表格中的某一行数据 var rowId = selectId.replace('select_', ''); // 假设这里有一个更新表格数据的函数 updateTableData(rowId, selectedValue); }); function updateTableData(rowId, selectedValue) { // 这里可以实现更新表格数据的逻辑 console.log('Row ID: ' + rowId + ', Selected Value: ' + selectedValue); } }); ``` 上述代码中,`layuiSelect`函数会根据传入的`selectId`、`url`和`value`来绑定下拉框回填数据。表格渲染完成后,会为每个下拉框调用`layuiSelect`函数绑定数据。同时,监听下拉框的选择事件,当用户选择下拉框中的选项时,会触发相应的回调函数,可在回调函数里实现数据回填操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值