昨天修bug时发现,系统有个功能是选择文字模板,如果选择的模板改变,会弹窗确认框选择是否覆盖之前的内容,当选择否的时候,不覆盖当前内容,但是下拉框的值变了,这就出现了不对应,所以应该在选择否的时候,撤销下拉框的本次选中。
解决这个问题可以使用jQuery提供的 $.data() 来把值赋给一个自定义属性,并在每次确认改变选中下拉框的值的时候更新这个属性的值。
Example:
<select name="template">
<option value="template1">模板一</option>
<option value="template2">模板二</option>
<option value="template3">模板三</option>
</select>
<div id="target"></div>
$('#template').change(function() {
var selected = $(this).val();
var text = $.trim($('#target').text());
if(text) {
if(confirm('是否覆盖已有模板?')) {
$('#target').text(selected);
} else {
$('#template').val($.data(this, 'current'));
}
} else {
$('#target').text(selected);
}
$.data(this, 'current', $(this).val());
});
演示:
选择文字模板: