Для ответа на конкретный вопрос, похоже, проблема происходит внутри следующего блока кода:
$('#selectNumber1').on('change', function(){
firstValue = $(el).text();
$('#nm1').val(firstValue);
});
$('#selectNumber2').on('change', function(){
secondValue = $(el2).text();
$('#nm2').val(secondValue);
});
Переменные el
и el2
созданы немного дальше вверх сценарий, в две петли, которые создают параметры выбора. Когда первый цикл завершается, el
равно последний вариант, что цикл, созданный - Z. Когда второй цикл завершается, el2
равно последний вариант, что этот цикл создано - также Z.
С el
и el2
являются не изменяются, они всегда будут указывать на параметр Z в первом выпадающем меню и параметр Z во втором раскрывающемся списке соответственно.
Чтобы решить эту проблему, вам просто нужно взять метку выбранного варианта. Вы можете сделать это, используя некоторые полезные методы JQuery:
firstValue = $("#selectNumber1").find(":selected").text(); //For the first dropdown's selected label
secondValue = $("#selectNumber2").find(":selected").text(); //For the second dropdown's selected label
Вот объяснение того, что происходит:
$("#selectNumber1")
- JQuery попытается найти элемент с идентификатором «selectNumber1»;
.find(":selected")
- С элементами (элементами), которые jQuery находит на шаге 1, найдите child (ren), у которых есть атрибут «selected» (найти выбранный вариант); и
.text()
- Возвращает внутренний текст первого элемента, найденного на шаге 2.
Собираем все вместе, вы будете в конечном итоге с этим:
$('#selectNumber1').on('change', function(){
firstValue = $("#selectNumber1").find(":selected").text();
$('#nm1').val(firstValue);
});
$('#selectNumber2').on('change', function(){
secondValue = $("#selectNumber2").find(":selected").text();
$('#nm2').val(secondValue);
});
Это должно работать нормально для вас, но все, что было сказано, я бы рассмотреть возможность сделать некоторые основные очистки и упрощение ваш код. Структуру данных, с которой вы работаете, трудно работать (если у вас нет выбора, потому что это то, как данные даются вам, я понимаю), переменные определены и переопределены, что затрудняет их выполнение, и некоторые из них используют jQuery в некоторых мест и прямых JS в других, что также может быть трудно следовать.
Для структуры данных, это может быть намного проще для вас, если ваши данные выглядели что-то более, как это:
var data = {
x: {
y: 0.1,
z: 0.2
},
y: {
x: 0.9,
z: 0.3
},
z: {
x: 0.8,
y: 0.7
}
}
Если ваши данные были в матрице, как это, то вы можете ссылаться на значения данных в качестве data.x.y
для когда x выбирается первым и y вторым, по сравнению с data.y.x
, когда имеет место обратное. Если вам нужно получить эти свойства в качестве переменных, скажите var first = "x" и var second = "y", то вы можете использовать данные [first] [second].
Вложенные свойства облегчают жизнь в этом случае.
Это просто пища для размышлений, много способов решить эту задачу.
Надеюсь, это поможет!
Полезные ссылки: https://api.jquery.com/find/ https://api.jquery.com/selected-selector/ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors
Итак, вы хотите, чтобы 1-й txtbox = 1drpdown и 3-txtbox = 2drpdown. Я прав? если да, почему бы просто не скопировать значение в событие изменения с помощью javscript – Iceman
Это: '{(1,2): 0.1}' не имеет смысла. Вы можете сделать '{" 1,2 ": 0.1}' или '' {"(1,2)": 0.1} '', но вы не можете иметь '(1,2)' как имя ключа свойства объекта , – nnnnnn