HTML 表单只读 SELECT 标记/输入
2022-08-29 22:33:41
根据HTML规范,HTML中的标签没有属性,只有属性。因此,如果要防止用户更改下拉列表,则必须使用.select
readonly
disabled
disabled
唯一的问题是禁用的HTML表单输入不包含在POST / GET数据中。
模拟标记的属性并仍获取 POST 数据的最佳方法是什么?readonly
select
根据HTML规范,HTML中的标签没有属性,只有属性。因此,如果要防止用户更改下拉列表,则必须使用.select
readonly
disabled
disabled
唯一的问题是禁用的HTML表单输入不包含在POST / GET数据中。
模拟标记的属性并仍获取 POST 数据的最佳方法是什么?readonly
select
您应该保留该元素,但也应添加另一个具有相同名称和值的隐藏元素。select
disabled
input
如果重新启用 SELECT,则应将其值复制到 onchange 事件中的隐藏输入,并禁用(或删除)隐藏输入。
下面是一个演示:
$('#mainform').submit(function() {
$('#formdata_container').show();
$('#formdata').html($(this).serialize());
return false;
});
$('#enableselect').click(function() {
$('#mainform input[name=animal]')
.attr("disabled", true);
$('#animal-select')
.attr('disabled', false)
.attr('name', 'animal');
$('#enableselect').hide();
return false;
});
#formdata_container {
padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<form id="mainform">
<select id="animal-select" disabled="true">
<option value="cat" selected>Cat</option>
<option value="dog">Dog</option>
<option value="hamster">Hamster</option>
</select>
<input type="hidden" name="animal" value="cat"/>
<button id="enableselect">Enable</button>
<select name="color">
<option value="blue" selected>Blue</option>
<option value="green">Green</option>
<option value="red">Red</option>
</select>
<input type="submit"/>
</form>
</div>
<div id="formdata_container" style="display:none">
<div>Submitted data:</div>
<div id="formdata">
</div>
</div>
我们还可以禁用除所选选项之外的所有内容。
这样,下拉列表仍然有效(并提交其值),但用户无法选择其他值。
<select>
<option disabled>1</option>
<option selected>2</option>
<option disabled>3</option>
</select>