选择下拉列表只读(未禁用)

时间:2015-06-03 12:47:38

标签: javascript jquery jquery-chosen

我希望将chosen下拉菜单设为只读,我需要使用jQuery选择器动态执行此操作。如果我使用以下方法将其设置为禁用:

$("#dropdownDepartment").attr("disabled","disabled").trigger('chosen:updated');

该值未发布但我需要它。

我试过了

$("#dropdownDepartment").attr('readonly',true).trigger('chosen:updated');

但这不起作用。

我正在使用Chosen v1.4.2jQuery v2.1.4

帮助表示感谢!谢谢。

6 个答案:

答案 0 :(得分:4)

您可以选择几种方法。

  • 禁用下拉列表并将值存储在隐藏字段中,然后在POST中发送。
  • 禁用所有其他选项,以便仅启用所选的一个

    $('#dropdownDepartment option:not(:selected)').attr('disabled', true);
    
  • 禁用下拉列表并在启用帖子之前
  • 如果要禁用它,请将其转换为只读文本框

答案 1 :(得分:4)

试试这个: -

var select = $('select');
var oldVal=$('select').val();
select.chosen().on('change',function(e){   
     select.val(oldVal);
   select.trigger("chosen:updated");  
});

Demo

答案 2 :(得分:4)

对我来说,最好的解决方案就是这样一个丑陋的技巧$("#dropdownDepartment").prop('disabled',true).trigger('chosen:updated').prop('disabled',false)。 因此选择被禁用但select的值被POST。

答案 3 :(得分:2)

我有同样的解决方法。所以希望它能帮助将来有人(我猜你已经做过了解决方案)。

首先将所选选择的所选选项值打印到隐藏输入中,如下所示。对于$_POST值,请从此隐藏输入$_POST['myselect']中获取值:

<input type="hidden" name="myselect" value="selected_option_value_goes_here" />

然后禁用所选的选择。但在禁用它之前将隐藏输入值设置为当前输入值是安全的:

$('input[name=myselect]').val($(".chosen-select").val());   
$('.chosen-select').attr("disabled", true).trigger("chosen:updated");

N.B。如果您不想禁用它,则无需在所选选择的更改事件上更新隐藏输入的值。

A working demo can be found by clicking here.

答案 4 :(得分:1)

我可能迟到了,但我遇到的问题与OP相同。我发现即使它们被禁用也要回发值的解决方法是在提交表单时重新启用它们。

$("form").bind("submit", function () {
    $("#TheList *").prop("disabled", false).trigger("chosen:updated");
});

注意TheList之后的[space] [star],它是以递归方式重新启用列表中的每个子项。

答案 5 :(得分:0)

我们可以通过删除选定容器div上的指针事件来实现例外行为。

即使没有启用此输入,其值也将通过表单Submit

发布
//to disable
$('.chosen').parent().find('.chosen-container').css({'pointer-events': 'none','opacity':0.5});
//to enable
$('.chosen').parent().find('.chosen-container').css({'pointer-events': '','opacity':1});