Попытка организовать значения между элементами с помощью пользовательского ввода

0

Это мой первый пост. Я работаю над 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';
}

Я застрял, потому что не могу понять, как проверить все элементы, чтобы найти один с подходящим значением, и не могу понять, как сравнивать используемые значения, чтобы определить, какой из них не используется.

Есть идеи? Также, пожалуйста, не стесняйтесь говорить мне, если я вообще ошибаюсь.

Теги:

3 ответа

1
Лучший ответ

Я предполагаю, что вы используете 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, который имеет новый текст в нем, на предыдущее значение. Также он проверяет, является ли выбранный элемент не этим элементом.

Полагаю, это о том, чего вы хотели.

  • 1
    Ваша логика более полная, чем моя. Приятно.
0

Вам нужны некоторые условные обозначения...

хватайте свои ценности

var elem1 = document.getElementById("1");
var elem2 = document.getElementById("2");

и т.д...

затем перекрестите свои элементы

if(elem1 = "a")

{
  elem2.value="blah";
}else{change elements accordingly}

вы также можете проверить значение null

если вы хотите, чтобы некоторые реальные примеры падения значения проверки я могу загрузить их

0

Во-первых, не используйте встроенные обработчики 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
        }
    });
});
  • 0
    Обновлено с более подробной информацией.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню