在更改之前获取选择(下拉列表)的值

2022-08-30 00:23:27

我想要实现的是,每当下拉列表更改时,我都希望在更改之前显示下拉列表的值。我正在使用1.3.2版本的jQuery并使用更改事件,但是我在那里获得的值是在更改之后。<select>

<select name="test">
<option value="stack">Stack</option>
<option value="overflow">Overflow</option>
<option value="my">My</option>
<option value="question">Question</option>
</select>

假设当前选项 My 现在处于选中状态,当我在 onchange 事件中将其更改为堆栈时(即,当我将其更改为堆栈时),我希望它是以前的值,即在这种情况下我的预期值。

如何实现这一点?

编辑:在我的情况下,我在同一页面中有多个选择框,并希望将相同的内容应用于所有这些框。此外,我的所有选择都是在通过ajax加载页面后插入的。


答案 1

焦点事件与变更事件相结合,实现您想要的目标:

(function () {
    var previous;

    $("select").on('focus', function () {
        // Store the current value on focus and on change
        previous = this.value;
    }).change(function() {
        // Do something with the previous value after the change
        alert(previous);

        // Make sure the previous value is updated
        previous = this.value;
    });
})();

工作示例:http://jsfiddle.net/x5PKf/766


答案 2

请不要为此使用全局变量 - 将 prev 值存储在数据中,这里有一个例子:http://jsbin.com/uqupu3/2/edit

引用的代码:

$(document).ready(function(){
  var sel = $("#sel");
  sel.data("prev",sel.val());

  sel.change(function(data){
     var jqThis = $(this);
     alert(jqThis.data("prev"));
     jqThis.data("prev",jqThis.val());
  });
});

只是看到您在页面上有很多选择 - 这种方法也适用于您,因为对于每个选择,您将把上一个值存储在选择的数据上