2012-03-14 139 views
0

我已经写下面几行来显示多选框,并且我想禁用之前选择的一些选项。获得选择框中的禁用(禁用并选择先前)选项的值

<select multiple="multiple" name='cars[]'> 
    <option value="volvo" disabled selected='selected'>Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
</select> 

所以在这里在POST方法中,我想获得包括第一个沃尔沃在内的所有选定选项的值。

+0

有些浏览器(所有?)不发送禁用的字段。要么改变它只读或得到一些真正丑陋的JS hackery去:) – Corbin 2012-03-14 06:47:44

+0

你是什么意思_previously selected_? – 2012-03-14 06:48:16

+0

在所有浏览器中解决此问题 – 2012-03-14 06:49:14

回答

1

Afaik,没有现代浏览器将提交一个表单中禁用的选项/字段。最简单的解决方案是使用“只读”属性将其设置为“只读”字段。

但是,您必须将字段样式设置为已禁用,因为只读不会改变字段的外观,只会阻止用户修改该字段。

然而,丑陋的部分是,一些浏览器将不允许readonly属性设置为选择字段。

我在这种情况下通常会做的是实际禁用选择并将其存储在隐藏字段中,而不是使用一些不那么丑陋的JavaScript来控制此动态。

更新:

你可以很容易地写一个“serializeDisabled”功能,遍历其中有一个name属性,并使用jQuery.param功能末,生成序列化的字符串残疾人表单元素(功能来自这里的用户CMS):

(function ($) { 
    $.fn.serializeDisabled = function() { 
    var obj = {}; 

    $(':disabled[name]', this).each(function() { 
     obj[this.name] = $(this).val(); 
    }); 
    return $.param(obj); 
    } 
})(jQuery); 
1

您可以创建一个javascript函数来循环选项onSubmit并再次启用它们。禁用的元素不会发布。

1

当您设置禁用在POST数据永远不会....替代选择输入型text..and使用“只读”的,物业......

感谢