@vss96

Как с помощью события onchange select, заполнить сразу 3 input?

Совершенно недавно начал изучать ASP.NEt MVC, собираюсь сделать веб интерфейс расчета. Имеется база данных SQL(локальная) из которой в тэг select передаю названия городов и соответствующие тепловые характеристики(T_ext,Z_ht,T_ht) с помощью цикла foreach и ViewBag, в котором храню данные. Так вот, мне необходимо по onchange в selecte заполнить соответствующими данными три поля input.
Пробовал с помощью getelementbyid, получается вывести значение только одного параметра в один input.
Сам select:
Выберите город,в котором планируете строительство:
        <select id="select" onchange="">
            <option selected="selected">Выберите город</option>
            @foreach (var b in ViewBag.cities)
            {
                <option>@b.Name</option>
            }
        </select>


В ViewBag.cities содержаться данные вида:
db.cities.Add(new Cities { Name = "Нижний Новгород", T_ext=-31, T_ht=215, Z_ht=-4.1 });
db.cities.Add(new Cities { Name = "Ростов на дону", T_ext = -22, T_ht = 171, Z_ht = -0.6 });
db.cities.Add(new Cities { Name = "Таганрог", T_ext = -22, T_ht = 167, Z_ht = -0.4 });
  • Вопрос задан
  • 452 просмотра
Решения вопроса 1
@kttotto
пофиг на чем писать
На сервере
<select id="select">
	<option selected="selected">Выберите город</option>
	@foreach (var b in ViewBag.cities)
	{
		<option value='@JsonConvert.SerializeObject(b)'>@b.Name</option>
	}
</select>

На клиенте
$('#select').change(function(){
	var $val = $(this).find('option:selected').val();
	if(!$val) return;
	var obj = JSON.parse($val); // здесь js объект с вашими полями
	// и здесь его можно обработать и заполнить свои инпуты
	var t_ext = obj.T_ext;
	var t_ht = obj.T_ht;
	var z_ht = obj.Z_ht;

	$('input#T_ext').val(t_ext);  // Добавил исходя из Ваших комментариев других ответов
	$('input#Zht').val(t_ht);
	$('input#Tht').val(z_ht);
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@dmitryKovalskiy
программист средней руки
У вас все option с одинаковым значением value. Так, для справки. А теперь мой ключевой вопрос - а что происходит в событии onchange, которое вы тут не показали? Предположим у вас есть option:selected. А что вы оттуда берете? название? Или вы хотите на клиентской стороне по названию из ViewBag достать еще какие-то значения? У меня для вас плохие новости - так делать нельзя и на 99% я уверен что невозможно. Это серверный объект.
Ответ написан
@PushMeNow
.NET Developer
Если я правильно вас понял вы не можете взять сразу три значения? Если да, то для вас есть несколько вариантов решений:
1. в каждый тег option записывать три скрытых поля input, которые будут содержать эти значения:
<option>Город <input type=hidden name="T_ext" value="..."><input type=hidden name="T_ht" value="..."><input type=hidden name="Z_ht" value="..."></option>

При событии onchange вы просто смотрите какой элемент был выбран и берёте значения из скрытых полей.
2. вариант через js массив. создаёте массив объектов и запихиваете в него все значения. далее у каждого option ставите value, который будет соответствовать элементу массива. ну и при событии onchange берёте value и по индексу вытаскиваете объект массива.
Больше мог бы сказать, если бы вы предоставили своё событие onchange и те input поля, о которых идёт речь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы