내가 달성하고자하는 것은 <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;
}
});
});