Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   предыдущее значение select (https://javascript.ru/forum/dom-window/24196-predydushhee-znachenie-select.html)

nikolski 21.12.2011 09:15

предыдущее значение select
 
Доброго времени суток!

Имеем на странице фильтр (несколько селектбоксов), на который подвешен обработчик onChange(). В самом обработчике задается вопрос о том, действительно ли пользователь хочет поменять данные? И если он отвечает отрицательно, но надо вернуть старое значение.
Каким образом это можно сделать? Как можно узнать старое значение?

Код обработчика:
function processFilterChanging(obj) {

	// var lastValue = ??;

	if (needFilterCheck == true) {
		var tsProjectsRow = dojo.query(".time_sheet_row");
		if (tsProjectsRow.length > 0) {
			if (!confirm("Данные на закладке 'Проекты' еще не записаны. Вы уверены?")) {
				// obj.value = lastValue;
			}
		}

		var tsProjectsRow = dojo.query(".time_sheet_row_pre");
		if (tsProjectsRow.length > 0) {
			if (!confirm("Данные на закладке 'Пресейлы' еще не записаны. Вы уверены?")) {
				// obj.value = lastValue;
			}
		}
	}
}


Спасибо! Буду рад как конкретному решению, так и направлению куда рыть.

Pavel M. 21.12.2011 11:17

можно так,
это на jquery - на dojo можно переделать

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=UTF-8">
	<title>demo</title>
	<script type='text/javascript' src='http://code.jquery.com/jquery-git.js'></script>
	<script> 
	$(function(){
		var jSelect = $('select'),
			oldVal = jSelect.val();

		jSelect.change(function () {
			if (!confirm("Поменять данные")) {
				$(this).val(oldVal); // возврат старого значения
			}
			oldVal = $(this).val(); // запоминаем текущее
		});
	});
	</script>
</head>
<body>
  <select>
    <option>1</option>
    <option>2</option>
    <option>3</option>
  </select>
</body>
</html>

Pavel M. 21.12.2011 12:35

попробовал на dojo - знаю плохо
если у select установлен атрибут multiple надо будет доработать

<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=UTF-8">
	<title>demo</title>
	<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dojo/dojo.xd.js.uncompressed.js'></script>

	<script>
		dojo.ready(function() {
			var dSelect = dojo.query('select'),
				oldIndex = dSelect[0].selectedIndex;

			dSelect.onchange(function () {
				if (!confirm("Поменять данные")) {
					this.selectedIndex = oldIndex; // возврат старого значения
				}
				oldIndex = this.selectedIndex; // запоминаем текущее
			});
		});
	</script>
</head>
<body>
  <select>
    <option>1</option>
    <option>2</option>
    <option>3</option>
  </select>
</body>
</html>

рони 22.12.2011 06:37

nikolski,
Вариант ...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<title></title>
</head>
<body>
 <select  name="fg" onchange="fn()"   >
<option value="zero" >- выберите -</option>
<option value="aaa" >aaa</option>
<option value="bbb" >bbb</option>
<option value="ссс" >ccc</option>
<option value="ddd" >ddd</option>
</select>
<script  type="text/javascript">
var fn = function () {
        var a = document.getElementsByName("fg")[0],
            b = a.options[a.selectedIndex||0].value;
        return function () {
            return confirm("Вы уверены") ? b = a.value : a.value = b
        }
    }();
</script>
</body>
</html>

nikolski 22.12.2011 09:29

Спасибо, попробую!

Pavel M. 22.12.2011 11:03

Вопрос к знающим (задал здесь, т.к. близко к теме)

в http://learn.javascript.ru/tutorial/form-elements
в разделе 'select'
есть фраза
'Элементы типа select ....... поддерживают свойство value, но только на чтение. '

это опечатка ?

рони 22.12.2011 14:15

Pavel M.,
value селекта можно установить только из имеющихся value его options, в некоторых браузерах например Mozilla Firefox при отсутствии у options value значение ищется среди options = > text, если подходящее для установки значение ненайдено обычно остаётся прежнее значение или пусто.


Часовой пояс GMT +3, время: 09:41.