Javascript 获取onchange事件jQuery之后下拉列表的上一个值

Javascript 获取onchange事件jQuery之后下拉列表的上一个值,javascript,jquery,dropdown,Javascript,Jquery,Dropdown,在onchange事件之后,如何获取自动生成的下拉菜单的上一个值?范例 <select class="form-control" name="Diabetes_UK_3147" id="Diabetes_UK_3147" onchange="return verifyUpdateResponseGross(this);"> <option value="Yes">Yes</option> <option value="Possibly">P

在onchange事件之后,如何获取自动生成的下拉菜单的上一个值?范例

<select class="form-control" name="Diabetes_UK_3147" id="Diabetes_UK_3147" onchange="return verifyUpdateResponseGross(this);">
  <option value="Yes">Yes</option>
  <option value="Possibly">Possibly</option>
  <option value="">N/A</option>
</select>
我想要获取上一个值的原因是,我需要检查,如果下拉值为空(N/a),则我需要执行一些操作,如果该值不为空,则我需要执行另一个操作,但当该值不为空但与上一个值相同时,则不执行任何操作

这些操作是注释中的操作。谢谢

更新自动生成id和名称。这就是为什么我有一个

onchange="return verifyUpdateResponseGross(this);"
这将处理更改并执行必要的操作

这是自动生成的


通过jquery实现这一点的最佳方法:

  $(document).ready(function(){
        var previous;
         $("#Diabetes_UK_3147").on("focus click",function () {
            previous = this.value; // Old vaue 

        }).change(function() {
        var value =  this.value; // New Value
          $('span').text('Old Value : '+previous+' New Value : '+value)
        });

    })
这是小提琴

编辑:在自动生成的下拉列表中,您可以添加自定义类,例如“myselectbox”


通过jquery执行此操作的最佳方法:

  $(document).ready(function(){
        var previous;
         $("#Diabetes_UK_3147").on("focus click",function () {
            previous = this.value; // Old vaue 

        }).change(function() {
        var value =  this.value; // New Value
          $('span').text('Old Value : '+previous+' New Value : '+value)
        });

    })
这是小提琴

编辑:在自动生成的下拉列表中,您可以添加自定义类,例如“myselectbox”


使用
data
将数据存储为全局变量:

$("#Diabetes_UK_3147").on("focus",function(){  
     $(this).data('previous',$(this).val());
}
然后您可以通过
$(“#Diabetes_UK_3147”)访问上一个值


使用
数据
存储数据,而不是全局变量:

$("#Diabetes_UK_3147").on("focus",function(){  
     $(this).data('previous',$(this).val());
}
然后您可以通过
$(“#Diabetes_UK_3147”)访问上一个值


使用
数据-*
如下。另外,删除内联事件处理程序
onchange=“return verifyUpdateResponseGross(this);”
并以不引人注目的方式执行

var $select = $("#Diabetes_UK_3147");
$select.data("previous-val", $select.val());

$select.on("change", function() {

    var current_value = $(this).val();

    if (current_value == "") {
        //Do stuff when empty   
    } else if ( current_value != $(this).data("previousVal") && current_value != "" ) {
        //Do stuff when not empty and current value != previous value
    }
});

使用
数据-*
如下。另外,删除内联事件处理程序
onchange=“return verifyUpdateResponseGross(this);”
并以不引人注目的方式执行

var $select = $("#Diabetes_UK_3147");
$select.data("previous-val", $select.val());

$select.on("change", function() {

    var current_value = $(this).val();

    if (current_value == "") {
        //Do stuff when empty   
    } else if ( current_value != $(this).data("previousVal") && current_value != "" ) {
        //Do stuff when not empty and current value != previous value
    }
});

如何生成菜单?页面加载时选择了哪个值?将以前的值存储在var中,并在每次更改时更新它。您是如何生成菜单的?页面加载时选择了哪个值?将以前的值存储在var中,并在每次更改时更新它。答案很好,但只有在更改时触发模糊时才起作用,这不是用户为什么
select[id=Diabetes\u UK\u 3147]
not
#Diabetes\u UK\u 3147
?这会起作用,但为什么焦点事件会起作用?您只需将代码存储在“更改”事件处理程序中的上一个值,并在首次创建select时将其存储。@MattBrowne OP使用术语“自动生成”。没有人确定这是在页面加载还是在页面加载之后,因此页面加载中可能不存在。这两个答案都是最安全的。@MattBrowne
change
事件是在值更改后触发的,因此您无法访问旧值。答案不错,但只有在更改时触发模糊时才起作用,这不是用户为什么
选择[id=Diabetes\u UK\u 3147]
不是
#糖尿病(英国)3147
?这会起作用,但为什么会是焦点活动?您只需将代码存储在“更改”事件处理程序中的上一个值,并在首次创建select时将其存储。@MattBrowne OP使用术语“自动生成”。没有人确定这是在页面加载还是在页面加载之后,因此页面加载中可能不存在。两个答案都是最安全的。@MattBrowne
change
事件是在值更改后触发的,因此您无法访问旧值。
var $select = $("#my-select");

$select.data("prevVal", $select.val()).data("currVal", $select.val()).on("change", function () {
    var $this = $(this);
    $this.data("prevVal", $this.data("currVal")).data("currVal", $this.val());

    // do your staff here. Previous value is available in $this.data("prevVal")
});