昨天修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());
});

演示
选择文字模板:


参考:jQuery how to undo a select change