Это мой первый пост. Я работаю над webapp, который будет сортировать пять различных значений между пятью элементами, но я не уверен, как лучше всего это сделать.
Существует пять элементов выбора с пятью значениями, разделяемыми между ними. Я буду называть их элементами 1-5 и значениями AE. Цель состоит в том, чтобы каждое значение использовалось только один раз между всеми пятью элементами. Поэтому, если у меня есть:
1 = A, 2 = B, 3 = C, и пользователь меняет значение в элементе 2 от B до A, элемент 1 необходимо изменить на B, чтобы каждое значение отображалось только один раз.
Моя идея состоит в том, чтобы попытаться использовать одну функцию, которая запускает onchange из каждого элемента, получает новое значение из элемента триггера, затем находит другой элемент с тем же значением и обновляет его, чтобы использовать неиспользуемое значение. Каждый блок выбора выглядит следующим образом:
<select id="1" onchange="updateElements(this);">
Тогда функция будет выглядеть примерно так:
function updateElements(trigger)
{
var new_value = document.getElementById('trigger').value;
// here we check all the elements minus the trigger to find one
// with a value that matches new_value, but how? Then we go to...
// here where we compare all of the values of the elements against
// the list of all values to determine which one isn't being used
// finally we set the element that had the matching value to use
// the unused value
document.getElementById('matchingelement').value = 'unused_value';
}
Я застрял, потому что не могу понять, как проверить все элементы, чтобы найти один с подходящим значением, и не могу понять, как сравнивать используемые значения, чтобы определить, какой из них не используется.
Есть идеи? Также, пожалуйста, не стесняйтесь говорить мне, если я вообще ошибаюсь.
Я предполагаю, что вы используете jQuery, так как это один из ваших тегов.
var previous_value;
$('select').focus(function(e) {
previous_value = $(this).val();
}).change(function(e) {
var new_value = $(this).val();
$('select:contains(' + new_value + ')').not($(this)).val(previous_value);
});
Я подумал о чем-то подобном. Как только вы фокусируете элемент select, его текущее значение сохраняется в переменной previous_value
. При изменении новое значение сохраняется в new_value
. В то же время он устанавливает значение элемента select, который имеет новый текст в нем, на предыдущее значение. Также он проверяет, является ли выбранный элемент не этим элементом.
Полагаю, это о том, чего вы хотели.
Вам нужны некоторые условные обозначения...
хватайте свои ценности
var elem1 = document.getElementById("1");
var elem2 = document.getElementById("2");
и т.д...
затем перекрестите свои элементы
if(elem1 = "a")
{
elem2.value="blah";
}else{change elements accordingly}
вы также можете проверить значение null
если вы хотите, чтобы некоторые реальные примеры падения значения проверки я могу загрузить их
Во-первых, не используйте встроенные обработчики JS-кликов, если вам не нужно:
$('#1').change(function() {...}
Затем используйте jQuery, если вы используете jQuery:
function updateElements(trigger) {
var new_value = $('#trigger').value;
...
$('#matchingelement').value = 'unused_value';
}
Я думаю, ты на правильном пути. Я бы использовал что-то вроде этого, чтобы получить каждое значение выбора:
$('select').change(function() {
var my_val = $(this).val();
$('select').each(function() {
if ( $(this).val() == my_val ) {
$(this).val( unused_val );
return
}
});
});