You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Select2设为只读而非禁用?ASP.NET Core场景遇失效问题

Select2设置只读不生效的原因及解决方法

为什么你尝试的两种方法无效?

  • 原生HTML的<select>标签不支持readonly属性,浏览器会直接忽略这个设置,所以$('select').prop('readonly',true)完全起不到作用。
  • Select2本身没有内置的readonly方法,官方文档里的相关描述可能针对旧版本或存在误导,调用$('select').select2('readonly',true)自然不会生效。

可行的解决方案

方案1:模拟只读状态(保留值提交能力)

通过禁用Select2的交互行为、隐藏搜索框并添加禁用样式,实现视觉和功能上的只读效果:

// 初始化或重新配置Select2,隐藏搜索框
$('select').select2({
    minimumResultsForSearch: Infinity, // 隐藏搜索框
    // 保留你原有的其他配置项
});

// 阻止下拉展开
$('select').on('select2:opening', function(e) {
    e.preventDefault();
});

// 添加禁用样式,让UI看起来是只读状态
$('.select2-container').addClass('select2-container--disabled');

方案2:用disabled配合隐藏域提交值

如果倾向于用disabled,可通过添加同名隐藏域来传递值(因为disabled的表单元素不会被提交):

var $targetSelect = $('select');
var currentValue = $targetSelect.val();

// 禁用下拉框
$targetSelect.prop('disabled', true);
// 添加同名隐藏域,把当前值传入
$targetSelect.after(`<input type="hidden" name="${$targetSelect.attr('name')}" value="${currentValue}">`);

注意事项

  • 确保代码在Select2完全初始化完成后执行,比如放在$(document).ready()回调内。
  • 如果是动态生成的下拉框,要在元素渲染完成后再执行上述逻辑。

内容的提问来源于stack exchange,提问作者حمیدرضا بحری

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:12:37