Ich versuche, die Werte in einem Array zu aktualisieren, nachdem ein Element aus einer Auswahlliste entfernt wurde. Dazu benötige ich die attr('name')
für die Liste. Auf dem Ereignis eines item_remove
kann die $item
die Auswahlliste erhalten, aber sie kann die attr('name')
nicht finden, die ich benötige.Ist es möglich, den Namen einer Auswahlliste von einem Element zu erhalten, das gerade aus dieser Liste entfernt wurde?
Die folgende Lösung ist, wie ich dies für eine item_add
Ereignis mache. Sie werden sehen, dass die var thisSelect
die Auswahlliste erhält und von daher kann ich das Array Werte mit den tatsächlichen Listenwerten auffüllen.
/**
* Add callback behaviour once a select element has been selected.
*/
$('[data-type="select"]').each(function(i, v) {
v.selectize.on('item_add', function (value, $item) {
var thisSelect = $item.parents('.controls').find('select'),
name = thisSelect.attr('name'),
values = [],
exclusiveSelected = thisSelect.find('option[data-exclusive="true"]:selected');
if (exclusiveSelected.length) {
values.push({
"value": exclusiveSelected.val(),
"label": exclusiveSelected.text().trim(),
"label-key": exclusiveSelected.attr("label-key")
});
thisSelect.val(exclusiveSelected.val()).trigger('change');
} else {
thisSelect.siblings('.selectize-control').find('.item').each(function(i, v) {
values.push({
"value": $(v).data('value'),
"label": $(v).text().trim(),
"label-key": $(v).attr("label-key")
});
});
}
setMultipleFieldValues(name, values);
validate(documentId, name, fields);
});
});
Unten ist meine aktuelle Lösung für ein item_remove
Ereignis. Ein Cannot set property 'values' of undefined
Fehler tritt in der Konsole auf, da das Wertearray aufgrund des Namens der Liste, die als nicht definiert zurückgegeben wird, nicht ausgefüllt werden kann.
/**
* Add callback behaviour once a select element has been unselected.
*/
$('[data-type="select"]').each(function(i, v) {
v.selectize.on('item_remove', function (value, $item) {
var thisSelect = $item.parents('.controls').find('select'),
name = thisSelect.attr('name'),
values = [];
thisSelect.siblings('.selectize-control').find('.item').each(function(i, v) {
values.push({
"value": $(v).data('value'),
"label": $(v).text().trim(),
"label-key": $(v).attr("label-key")
});
});
setMultipleFieldValues(name, values);
validate(documentId, name, fields);
});
});
Beigefügt ist das select-Element ich den Namen „additionalWork“ von