#javascript #jquery #forms
#javascript #jquery #формы
Вопрос:
Я пытаюсь добавить значения, разделенные запятыми, в поле скрытой формы для последующей обработки, используя изменение выпадающего меню в качестве триггера.
$("#artistselect").change(function() {
var allids = [];
allids.push($(this).children(":selected").attr("id"));
$("input[name=artistslist]").attr("value", $(allids).append(allids ", "));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<select id="artistselect">
<option value="1">1</option>
<option value="1">1</option>
<option value="1">1</option>
</select>
<input type="hidden" name="artistslist" value="" />
</form>
Лучшее, что я могу сделать, это изменить значение на выбранный выпадающий список, но это не добавит их вместе с запятыми.
Комментарии:
1. Какова цель
allids.push($(this).children(":selected").attr("id"));
Ответ №1:
Выйдите var allids=[];
из события, потому что вы уничтожаете его каждый раз, когда оно запускается.
var allids=[];
$("#artistselect").change(function() {
allids.push($(this).children(":selected").attr("id"));
$("input[name=artistslist]").val(allids.join(', '));
});
В последней строке вы можете использовать Array.prototype.join, чтобы получить из массива строку, разделенную запятой.
Не уверен, почему вы используете .attr("id")
, когда ваш html показывает ваши параметры без атрибута id. Похоже, вам нужно значение, а не идентификатор.
Комментарии:
1. Такого рода работы, за исключением того, что я получаю <тип ввода= «скрытое» имя = «список исполнителей» идентификатор = «список исполнителей» значение=»13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15″> в моем скрытом поле…
2. неважно, я сошел с ума, javasript находился внутри цикла php while. ваш код работает идеально. Спасибо!
Ответ №2:
У вас две проблемы.
Во-первых, вы очищаете его allids
каждый раз, когда пользователь выбирает из меню. Поэтому, когда вы нажимаете на него, вы теряете старые значения и просто получаете самое последнее значение.
Во-вторых, $(allids).append(allids ", ")
делает не то, что вы думаете. .append()
предназначен для добавления чего-либо к элементу DOM, а не для объединения строк.
Чтобы получить значение a <select>
, просто используйте $(this).val()
, вам не нужно искать :selected
. У ваших <option>
элементов нет идентификаторов, поэтому .attr('id')
они ничего не вернут.
var allids = [];
$("#artistselect").change(function() {
allids.push($(this).val());
$("input[name=artistslist]").val(allids.join(", "));
});
$("#show").click(function() {
console.log($("input[name=artistslist]").val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<select id="artistselect">
<option value="">Select</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="hidden" name="artistslist" value="" />
<button type="button" id="show">Show hidden value</button>
</form>