解除前一个事件处理程序的Jquery .off()无法正常工作

时间:2015-12-13 05:05:21

标签: jquery

在一个页面中有多个选择html标记,并且我希望在用户单击下拉列表后从同一列表中获取前一个值和新值的两个值。似乎有.off()的错误,但我不知道如何找到它。

https://jsfiddle.net/etozr53s/

Book bookCheckOut = new Book(bookCheckOut);  //error: constructor Book(book) undefined
bookCheckOut.setStatus("OUT");
bookCheckOut.setBorrower(borrower);
bookCheckOut.setBook(bookCheckOut);
$(document).ready(function() {
  $('.SizeSelect').on('click', function() {

    var sel = $(this);
    sel.data("preValue", sel.val());
    sel.off('change').on('change', function() {
      var th = $(this);
      th.data("newValue", th.val());

      //output
      $('#log').append('pre:' + th.data("preValue") + ' / select:' + th.data("newValue") + '<br/>');

    });
  });
});

1 个答案:

答案 0 :(得分:1)

我认为这是你想要的代码

  

此代码将输出先前选择的值和新值   选中的值(来自同一列表)

$(document).ready(function() {
    $('.SizeSelect').on('change', function() {
      var th = $(this);
      var prevValue = th.find('option[data-prevValue]').attr('value');
      var newValue = th.find('option:selected').data("newValue", th.val()).attr('value');
      //output
      $('#log').append('prev:' + prevValue + ' / select:' + newValue + '<br/>');
      th.find('option').removeAttr('data-prevValue').removeAttr('data-newValue');
      th.find('option:selected').attr("data-prevValue", th.val());
    });
});

Working Demo