Здесь сценарий, у меня есть динамическая кнопка выпадающего меню, каждый раз, когда пользователь выбирает ее, будет просматривать список имен с помощью флажка в div;
если флажок установлен, значение (ids) будет добавлено в текстовое поле ниже; если он не установлен, он удалит значение.
:
Проблема заключается в том, что каждый раз, когда я выбираю в раскрывающемся списке и проверяю элемент, весь текст в текстовом поле удаляется. Здесь моя функция:
(function($) {
jQuery.fn.multiselect = function() {
$(this).each(function() {
var checkboxes = $(this).find("input:checkbox");
var selectAll = $(this).find("input[class='checkAll']");
selectAll.off('click').on('click', function() {
$(this).closest('div').find(':checkbox').prop('checked', this.checked );
$(this).closest('div').find(':checkbox').parent().toggleClass("multiselect-on", this.checked);
});
checkboxes.each(function() {
var checkbox = $(this);
checkboxes.on('change', function() {
$(this).parent().toggleClass("multiselect-on", this.checked);
var string = checkboxes.filter(":checked").map(function(){
return this.value;
}).get().join(",");
$('#empid').val(string);
});
});
});
};
})(jQuery);
--thanks для @undefined минимизации функции;)
Функция [ОБНОВЛЕНО]
Функция теперь работает соответственно с выбором всей опции. но идея должна быть; если один из элементов не отмечен, необходимо выбрать флажок "Выбрать все"!
нашел ту же идею в плагинах Multiple Select, которые я хочу включить в функции
Пожалуйста, помогите просветить меня снова! ; (
Предполагая, что #chekeditem
выбирает целевой элемент (textarea), вы должны просто использовать метод val
вместо text
. Для установки/получения значений формы используется метод val
.
Обратите внимание, что вы прикрепляете несколько обработчиков кликов к элементам в each
цикле:
checkboxes.each(function() {
...
// Add selected checkbox in textarea
checkboxes.on('click' ...
И jQuery on
методу итерации через коллекцию внутренне, вам не нужно использовать цикл на первом месте.
Вы также можете Минимизировать код, нет необходимости использовать несколько click
(лучше слушать change
событие) обработчик:
checkboxes.on('change', function() {
$(this).parent().toggleClass("multiselect-on", this.checked);
var string = checkboxes.filter(":checked").map(function(){
return this.value;
}).get().join(",");
$('#chekeditem').val(string);
});
Если обработчик должен быть вызван сразу после привязки события, вы можете инициировать событие с помощью метода change()
, trigger('eventName')
или triggerHandler()
.
checkboxes.on('change', function() {}).change();