Вы можете сделать это намного проще, поместив элементы <input>
в тег <form>
и прослушав событие change
в форме. Событие изменения происходит всякий раз, когда пользователь устанавливает или снимает флажок. Всякий раз, когда происходит изменение, используйте .serializeArray()
, чтобы получить массив со всеми значениями, которые проверяются в вашей форме. Затем используйте метод массива .map()
, чтобы получить значение идентификатора только из каждого проверенного ввода, и объедините значения с помощью .join()
, чтобы превратить массив в строку с идентификаторами. разделенных запятыми. И с результатом установите значение data-id
с новой строкой.
$('.user-form').on('change', function(event) {
var $form = $(this);
var data = $form.serializeArray();
var users = data.map(({ value }) => value).join(', ');
$('.block').attr('data-id', users);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="user-form">
<input type="checkbox" name="user" value="121asa31" class="user">
<input type="checkbox" name="user" value="121fdfd31" class="user">
<input type="checkbox" name="user" value="1213fd1" class="user">
<input type="checkbox" name="user" value="121jh31" class="user">
</form>
<div class="block" data-id="">
Some Content
</div>
Пример с пользователями и группами
function filterIdsByName(name, data) {
return data
.filter(item => item.name === name)
.map(({ value }) => value)
.join(', ');
}
$('.user-form').on('change', function(event) {
var $form = $(this);
var data = $form.serializeArray();
var groups = filterIdsByName('group', data);
var users = filterIdsByName('user', data);
$('.block-groups').attr('data-group-id', groups);
$('.block-groups').html(`Group ids: ${groups}`);
$('.block-users').attr('data-user-id', users);
$('.block-users').html(`User ids: ${users}`);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="user-form">
<input type="checkbox" name="user" value="121asa31" class="user">
<input type="checkbox" name="user" value="121fdfd31" class="user">
<input type="checkbox" name="user" value="1213fd1" class="user">
<input type="checkbox" name="user" value="121jh31" class="user">
<input type="checkbox" name="group" value="1213fd1" class="check group">
<input type="checkbox" name="group" value="121jh31" class="check group">
</form>
<div class="block-users" data-user-id="">
Some Content
</div>
<div class="block-groups" data-group-id="">
Some Content
</div>