我正在尝试根据用户输入动态设置表单内的输入值(在我的情况下为“choice”)。设置所需的值后,我想禁用该字段,以便用户无法更改它。这是我正在使用的代码。
// HTML
<select name="0-choices" id="id_0-choices">
<option value="Phone">Phone</option>
<option value="Fax">Fax</option>
<option value="Voicemail">Voicemail</option>
</select>
//Javascript
$(cfield).children().first().removeAttr('selected');
$(cfield).children('option[value="Voicemail"]').attr('selected','selected');
//$(cfield).val('Voicemail');
$(cfield).attr('disabled','disabled');
问题是,如果我禁用该字段,则该字段在发布的数据中不可用。所以我的验证函数抱怨数据不可用。如何“冻结”输入字段,然后才能发布它。
答案 0 :(得分:7)
我也遇到了这个问题,猜测你在发送Ajax请求时尝试禁用字段,我发现最好的解决方案是使用readonly:
$(cfield).attr('readonly', true);
用户无法修改字段的值,但仍然可以阅读
答案 1 :(得分:3)
您可以禁用该字段,然后将其值复制到隐藏的表单字段中。
<input type="hidden" name="cfield_hidden"/>
// snip...
$(cfield).attr('disabled','disabled');
$('#cfield_hidden').val($(cfield.val());
或者,您可以在提交表单之前立即启用选项:
$('some-form-selector').submit(function ()
{
$(this).find('option').attr('disabled', false);
});
答案 2 :(得分:0)
我会在提交时克隆该字段并设置删除已禁用的attr。并将其附加到您的表单,显示为无。
或者只是删除已禁用的onsubmit。
PS:你的用户名会比M更冷,而不是N;)
答案 3 :(得分:0)
创建一个隐藏的输入字段,如
$('.your-form').append("<input type='hidden' name='0-choices' value='"+$('cfield option:selected).val()+"' />")
因为禁用的输入将不会被提交..
答案 4 :(得分:0)
禁用输入字段后,您可以使用隐藏字段存储要发送的值。
这样的事情:
$(cfield).append('<input type="hidden" id="hiddenField" value="'+$(cfield).val()+'"/>');
$(cfield).attr('disabled','disabled');
答案 5 :(得分:0)
正如您所说的禁用输入不包含在发布数据中,您最好的选择是修复服务器端逻辑或存储名称为0选项的输入隐藏字段以及您想要发布的值。