使用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);
                    }

                }
            })

        }

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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Bootstrap Select 是一个基于 Bootstrap下拉框插件,它支持多选和搜索功能。多选下拉框可以让用户方便地选择多个选项,而搜索功能则可以帮助用户快速找到所需选项。此外,Bootstrap Select 还支持自定义样式和事件处理,可以满足各种需求。 ### 回答2: bootstrapselect是一种基于Bootstrap框架的下拉框插件,它提供了丰富多样的功能,可以帮助我们优化网站或应用的用户界面和交互体验。其中,多选下拉框bootstrapselect的一个重要组成部分,它可以让用户在一次选择中选取多个选项,方便快捷。 使用bootstrapselect多选下拉框,我们可以通过简单的设置来实现多选功能。首先,在HTML中引入相应的CSS和JS文件,然后在多选下拉框的select标签上添加“multiple”属性,设置其为多选模式。接着,使用jQuery选择对应的下拉框元素,并调用bootstrapSelect()方法,即可将其转化为多选下拉框。同时,我们也可以通过设置不同的选项来自定义该下拉框的外观和功能,如设置样式、添加提示信息等等。 另外,值得注意的是,bootstrapselect多选下拉框还提供了一些常用的方法和事件,可以通过它们来灵活控制下拉框的行为和响应。比如,我们可以使用val()方法获取或设置下拉框的选中值;使用toggle()方法在选择和取消选择之间切换;使用hide()和show()方法控制下拉框的显示和隐藏;使用changed.bs.select事件监听下拉框的选中值的改变等等。 总之,bootstrapselect多选下拉框是一个非常实用和方便的功能,可以大大地提高用户体验和交互效果,同时也能够为开发者带来许多便捷和灵活性。我们需要根据实际需求,合理地使用该功能,并通过不断学习和实践,不断优化我们的网站和应用。 ### 回答3: Bootstrapselect多选下拉框是一种常见的UI组件,它能够让用户在下拉框中选择多个选项,同时还能够给出美观的用户界面和良好的用户体验。 Bootstrapselect多选下拉框具有多种功能和特性。首先,它能够让用户通过键入字母或数字来快速查找选项,这样可以提高用户选择的效率。其次,它还支持多种选项的排列方式,包括按字母排序、按数字排序以及按用户输入顺序排序等。此外,Bootstrapselect还提供了多种选项样式和主题,可以根据不同的场景和需求来选择不同的样式。 除此之外,Bootstrapselect还支持多种事件和回调函数,如选项改变事件、选中事件、取消选中事件等,这些事件和回调函数可以帮助用户更好地处理用户交互,并提供更加方便和灵活的编程方式。 总的来说,Bootstrapselect多选下拉框是一种非常实用的UI组件,它可以为用户提供方便、快捷、美观的多选选项,从而帮助用户更好地完成任务,并提高用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值