我有一个选择框。
<select>
<option> one </option>
<option> two </option>
<option> three </option>
</select>
当我使用attr(“禁用”、“禁用”)禁用它并再次启用它时,先前选择的状态不被保留。有什么办法能留住他们吗?
编辑:我在这里附加一个小提琴手。
禁用它之后,当我在其他包装器中附加相同的复选框时,所选的值将不被保留。
发布于 2013-12-20 11:22:59
如果您只想阻止用户修改它,请使其只读,而不是禁用它:
$("#selectbox").attr('readonly', 'readonly')
更新
既然您已经澄清了您的问题与复制select
框有关,下面是一个解决方案:
jQuery("select").change(function () {
jQuery(this).attr("disabled", "disabled");
});
jQuery("button").click(function () {
jQuery("select").removeAttr("disabled");
jQuery('.wrapper').append(jQuery('.select-wrapper:first select').clone(true).val(jQuery('.select-wrapper:first select').val()));
});
小提琴
当您只是复制HTML时,您得到的只是DOM元素。HTML中不包括用户交互中对输入元素的更改。因此,此解决方案使用.clone()
复制select元素,然后将原始复选框的当前值复制到克隆中。
发布于 2013-12-20 11:21:51
一种方法是将当前值保存在临时字段/或临时JS变量中,当启用它时,将其放回。
var t1 = '';
//at disable
t1 = document.getElementById('select_1').value;
//at enable
document.getElementById('select_1').value = t1;
如果有多个复选框,则可以将它们保存在数组中:
var t2 = [];
或者,您可以为每个复选框使用一个掩码层:
<div id="mask_select_1" style="display:none; position:absolute; z-index:100;
width:80px; height:60px; background:#000000;
filter:alpha(opacity=00);
-moz-opacity:0.00;
opacity: 0.00;"> </div>
根据您的可见大小设置宽度和高度,而不是禁用,只需简单地使此掩码div display:inline
。因此,当您想要启用时,将其设置为display:none
为了您的方便,您还需要照顾div id来匹配选择框id .
发布于 2013-12-20 11:27:00
保存状态并将其设置为:
$('#selectId').data('state', $('#selectId').val()).prop('disabled', true);
//sowhere else in the code
$('#selectId').prop('disabled', false).val($('#selectId').data('state'));
这样你就不用处理变量了。
https://stackoverflow.com/questions/20702480
复制相似问题