使用bootstrap 开发多选下拉框,移除不符合要求的选项

笔记:

// 初始化previous-values
$(document).ready(function() {
    $('#jobRiskAnalysisId').data('previous-values', $('#jobRiskAnalysisId').val());
});
// 假设你有一个多选<select>元素  
$('#jobRiskAnalysisId').on('change', function() {  
    var $select = $(this);  
    var previousValues = $select.data('previous-values') || []; // 从data属性中获取之前的值(如果是第一次,则为空数组)  
    var currentValues = $select.val(); // 获取当前所有选中的值  
  
    // 找出新增和移除的选项  
    var addedValues = currentValues.filter(function(value) {  
        return previousValues.indexOf(value) === -1;  
    });  
  
    var removedValues = previousValues.filter(function(value) {  
        return currentValues.indexOf(value) === -1;  
    });  
  
    // 假设我们只对新增的选项感兴趣  
    if (addedValues.length > 0) {  
        // 这里我们只处理第一个新增的选项,如果你想处理所有新增的,可以遍历addedValues数组  
        var newlySelectedValue = addedValues[0];  
        console.log('新选中的值是:', newlySelectedValue);  
  
        // 如果你还想处理移除的选项,可以在这里添加逻辑  
        // ...  
    }  
  
    // 更新data属性以保存当前的值,供下次change事件使用  
    $select.data('previous-values', currentValues);  
});  
  
// 注意:如果页面加载时<select>已经有一些选项被选中,  
// 你可能需要在页面加载时设置'previous-values'的初始值。  
// 这可以通过在DOM加载完毕后立即读取$select.val()并将其存储在data属性中来完成。  
$(document).ready(function() {  
    $('#jobRiskAnalysisId').data('previous-values', $('#jobRiskAnalysisId').val());  
});
$('#jobRiskAnalysisId').on('change', function() {  
    // 初始化一个字符串来存储所有选中的值的ID(或值),假设这里是ID  
    let jobRiskAnalysisCheckedIds = "";  
  
    // 获取所有选中的<option>的值(在multi-select中,这将是一个数组)  
    var selectedOptions = $(this).val();  
  
    // 检查是否有任何选项被选中  
    if (selectedOptions.length < 1) {  
        // 如果没有选中任何选项,你可以在这里处理这种情况  
        // 例如,显示一个错误消息或重置其他表单字段  
        console.log("没有选中任何风险分析类型");  
    } else {  
        // 如果有选中的选项,你可以遍历它们或将它们连接成一个字符串  
        // 这里我们假设你想要将它们连接成一个由逗号分隔的字符串  
        jobRiskAnalysisCheckedIds = selectedOptions.join(",");  
  
        // 现在你可以使用jobRiskAnalysisCheckedIds变量了  
        // 例如,显示选中的值,发送到服务器等  
        console.log("选中的风险分析类型ID有:" + jobRiskAnalysisCheckedIds);  
    }  
  
    // 注意:如果你的<select>元素与某个selectpicker插件(如Bootstrap-select)绑定,  
    // 你可能需要在修改DOM或选项后调用插件的refresh方法来更新UI。  
    // 但在这个例子中,我们只是简单地读取了值,并没有修改DOM,  
    // 所以通常不需要调用refresh方法(除非你有其他操作改变了选项)。  
});

以下代码实现的功能是,选择风险分析时,要联动风险措施等字段,如果选择的风险分析没有维护风险措施信息,则选择的风险分析不会被选择,不会被显示在页面上

上完整代码(js部分):

  $('#jobRiskAnalysisId').on('change', function() {

            var $select = $(this);
            var previousValues = $select.data('previous-values') || []; // 获取之前选中的值
            var currentValues = $select.val(); // 获取当前选中的值
            $select.data('previous-values', currentValues);
            var selectedLabels = []; //  选择的文本内容,移除时候,也要移除页面上显示的文本内容
            $('#jobRiskAnalysisId option:selected').each(function() {
                // $(this).text() 获取当前<option>的文本内容(即dictLabel的值)
                selectedLabels.push($(this).text());
            });
            //获取新增的值
            var addedValues = currentValues.filter(function(value) {
                return previousValues.indexOf(value) === -1;
            });
            selectjobRiskControlMeasures(addedValues[0],$select,previousValues,currentValues,selectedLabels)

        });

        function selectjobRiskControlMeasures(methodId,$select,previousValues,currentValues,selectedLabels){
           /* document.getElementById('jobStep').value ="";
            document.getElementById('jobRiskControlMeasuresInfo').value ="";*/
            var url = "/nmeqit/v1/worksafetyinfo/selectjobRiskControlMeasures"
            var data = {};
            data.methodId=methodId;
            $.ajax({
                url: url,
                data: JSON.stringify(data),
                dataType:"JSON",
                cache: false,
                contentType: "application/json",
                processData: false,
                type: 'POST',
                success: function (result) {
                    let info1=[];
                    let info=[];
                    let idInfo=[];

                    if(result.data.length>0){
                        for(var i=0;i<result.data.length;i++){
                            info.push( result.data[i].jobRiskControlMeasures);
                            info1.push( result.data[i].jobStep);
                            idInfo.push(result.data[i].id);
                        }
                        if(info1.length>1){
                            document.getElementById('jobStep').value = info1.join("\n");
                        }else {
                            document.getElementById('jobStep').value = info1[0];
                        }
                        if(idInfo.length>1){
                            document.getElementById('jobRiskControlMeasures').value = idInfo.join(",");
                        }else {
                            document.getElementById('jobRiskControlMeasures').value = idInfo[0];
                        }
                        if(info.length>1){
                            document.getElementById('jobRiskControlMeasuresInfo').value = info.join("\n");
                        }else {
                            document.getElementById('jobRiskControlMeasuresInfo').value = info[0];
                        }
                    }else{
                        $.modal.alertWarning("当前选择的风险分析没有维护作业风险控制措施,请到管理系统中维护。");
                        // 如果需要“移除”新增的选项,即恢复到之前的状态
                            // 注意:这里我们假设没有“撤销”按钮,只是直接恢复
                            $select.val(previousValues); // 将选中项设置回之前的状态
                            // 可选:如果你想要在用户界面上给用户一些反馈
                           // alert('已撤销更改,并恢复到之前的选择。');
                            // 更新当前值,以便下次change事件能够正确地识别“新增”和“移除”
                            $select.data('previous-values', previousValues);
                            $('#jobRiskAnalysisId').selectpicker('refresh');
                            console.log(currentValues);
                            console.log(previousValues);
                    }

                }
            })

        }

代码有些冗余,大神看到了,烦请下手指点,双手合十

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值