Я пытаюсь взломать пару различных функций jquery, чтобы помочь мне завершить проект, над которым я работаю.
Кажется, что первая часть работает (заполнение двух входных текстовых полей, но я не могу заполнить второй вариант выделения с помощью массива, который я предоставил. Я уверен, что это что-то простое, но новое для jquery. Я не могу это понять.,
редактировать
Мне нужно разделить значение параметров (разделенных "_") первого раскрывающегося списка "Выбрать" и отправить их в оба отображаемых текстовых поля. Это важно для моей функциональности страницы.
Вот мой html
<form action="/revenue_lines/lock" id="lockLockForm" method="post" accept-charset="utf-8">
<input type="text" id="RevenueLineDate1">
<input type="text" id="RevenueLineDate2">
<select id="selector">
<option value="Data1_<Data1>">Sample1</option>
<option value="Data2_<Data2>">Sample2</option>
</select>
<select id="item"></select>
И вот мой jquery
$('#selector').on('change', function () {
var val = this.value;
var parts = val.split("_");
$('#RevenueLineDate1').val(parts[0]);
$('#RevenueLineDate2').val(parts[1]);
});
Sample1 = new Array('Top Story', 'Cases', 'News');
Sample2 = new Array('Top Story', 'Cases', 'News');
populateSelect();
$(function () {
$('#selector').change(function () {
populateSelect();
});
});
function populateSelect() {
selector = $('#selector').val();
$('#item').html('');
eval(selector).forEach(function (t) {
$('#item').append('<option>' + t + '</option>');
});
}
Вот ссылка на jsfiddle, над которым я работаю.
Спасибо заранее!
Ты был почти там!
Попробуйте вместо этого HTML:
<select id="selector">
<option value="Sample1">Sample1</option>
<option value="Sample2">Sample2</option>
</select>
Ваш.val() получает атрибут value для выбранного <option>
, а не текст.
Редактировать:
Я вижу из вашего редактирования, что исходные значения важны для вас. В этом случае замените свой .val()
в .val()
на .text()
и вы получите поведение, которое, я думаю, вы хотите.
function populateSelect() {
selector = $('#selector').text();
$('#item').html('');
eval(selector).forEach(function (t) {
$('#item').append('<option>' + t + '</option>');
});
}
В качестве примечания я обычно не рассматривал бы использование видимого текста в качестве хорошей практики - это мешает вам делать такие вещи, как локализация текста. Одним из альтернатив было бы вместо этого отключить первую часть значения (Data1, Data2) с помощью split()
и использовать их в качестве имен массивов. Затем вы можете изменять отображаемый текст, не нарушая свою функциональность.