[javascript] 변경 전 선택 (드롭 다운) 값 얻기

내가 달성하고자하는 것은 <select>드롭 다운이 변경 될 때마다 변경하기 전에 드롭 다운 값을 원한다는 것입니다. 1.3.2 버전의 jQuery를 사용하고 on change 이벤트를 사용하고 있지만 내가 얻은 값은 변경 후입니다.

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

onchange 이벤트에서 스택으로 변경할 때 (즉, 스택으로 변경했을 때) 현재 My 옵션이 선택되어 있다고 가정 해 보겠습니다.이 경우 이전 값을 원합니다.

이것이 어떻게 달성 될 수 있습니까?

편집 : 내 경우에는 같은 페이지에 여러 개의 선택 상자가 있고 모든 항목에 동일한 항목이 적용되기를 원합니다. 또한 모든 선택은 ajax를 통해 페이지를로드 한 후에 삽입됩니다.



답변

포커스 이벤트를 변경 이벤트와 결합하여 원하는 것을 달성하십시오.

(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


답변

이것에 전역 변수를 사용하지 마십시오-여기에 데이터에 이전 값을 저장하십시오 예 : 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());
  });
});

방금 페이지에 많은 선택이 있음을 보았습니다.이 방법은 각 선택에 대해 선택 값의 데이터에 이전 값을 저장하기 때문에 효과가 있습니다.


답변

나는 Avi Pinto의 솔루션을 사용합니다. jquery.data()

초점을 사용하는 것은 유효한 해결책이 아닙니다. 처음에는 옵션을 변경할 때 작동하지만 해당 선택 요소를 유지 한 상태에서 “위”또는 “아래”키를 누릅니다. 포커스 이벤트를 다시 거치지 않습니다.

따라서 솔루션은 다음과 같이 보입니다.

//set the pre data, usually needed after you initialize the select element
$('mySelect').data('pre', $(this).val());

$('mySelect').change(function(e){
    var before_change = $(this).data('pre');//get the pre data
    //Do your work here
    $(this).data('pre', $(this).val());//update the pre data
})


답변

손으로 값을 추적하십시오.

var selects = jQuery("select.track_me");

selects.each(function (i, element) {
  var select = jQuery(element);
  var previousValue = select.val();
  select.bind("change", function () {
    var currentValue = select.val();

    // Use currentValue and previousValue
    // ...

    previousValue = currentValue;
  });
});


답변

 $("#dropdownId").on('focus', function () {
    var ddl = $(this);
    ddl.data('previous', ddl.val());
}).on('change', function () {
    var ddl = $(this);
    var previous = ddl.data('previous');
    ddl.data('previous', ddl.val());
});


답변

이벤트 “live”를 사용하고 있는데 솔루션은 기본적으로 Dimitiar와 유사하지만 “focus”를 사용하는 대신 “click”이 트리거 될 때 이전 값이 저장됩니다.

var previous = "initial prev value";
$("select").live('click', function () {
        //update previous value
        previous = $(this).val();
    }).change(function() {
        alert(previous); //I have previous value 
    });


답변

드롭 다운 ‘변경시’액션 함수를 작성하기 전에 현재 선택된 드롭 다운 값을 선택한 jquery로 전역 변수에 유지하십시오. 함수에서 이전 값을 설정하려면 전역 변수를 사용할 수 있습니다.

//global variable
var previousValue=$("#dropDownList").val();
$("#dropDownList").change(function () {
BootstrapDialog.confirm(' Are you sure you want to continue?',
  function (result) {
  if (result) {
     return true;
  } else {
      $("#dropDownList").val(previousValue).trigger('chosen:updated');
     return false;
         }
  });
});