gpt4 book ai didi

javascript - Selectize.js - 停止事件 item_add

转载 作者:太空宇宙 更新时间:2023-11-04 16:15:16 25 4
gpt4 key购买 nike

我正在使用selectize我已经将其设置为用户只能从一系列选项中选择一个,如果他愿意,他也可以进行新的输入。我想做到这一点,如果用户选择其中一个选项,输入项将获得一个类,该类将对其进行样式设置,就像启用多个选项时选择样式化所选项目一样。

enter image description here

但是如果用户输入自己的输入,则该输入将没有样式,因此输入的输入和选定的输入会有所不同。但我不知道该怎么做?

这是我的脚本:

$('#engagement_question').selectize({
persist: false,
maxItems: 1,
options: items,
labelField: "item",
valueField: "item",
sortField: 'item',
searchField: 'item',
create: true,
render: {
option_create: function(data, escape) {
return '<div class="create">Nytt inlegg<strong> ' + escape(data.input) + '</strong>&hellip;</div>';
}
},
});

我尝试过使用事件 API,但没有成功:

var addItemClass = function() {
console.log('entered');
$('.item').addClass( "item-background" );
};

var removeItemClass = function() {
console.log('entered');
$('.item').removeClass( "item-background" );
};

var selectize = $select[0].selectize;
selectize.on('item_add', addItemClass);
selectize.on('option_add', removeItemClass);

这个想法是添加一个类,如果从选项中选择输入,则该类将为输入提供背景;如果输入新内容,则将其删除。但是当它进入removeItemClass函数时,它也会立即进入addItemClass函数。我怎样才能阻止它?

更新

最后我用它让它按照我想要的方式工作:

onChange: function(value) {
var unique = true;

for(var i = 0; i < items.length; i++) {
if(items[i].item == value) {
unique = false;
break;
}
}

if(value.length > 0 && unique) {
$question.next('.selectize-control').find('.selectize-input').addClass('user-created');
}
},

最佳答案

removeItemClassselectize.js 内部触发。在这里,我们检查了最后一个 .item 文本 是否与 items 数组 中的现有元素不匹配,而 background-image 是一个 渐变 设置为 none 并应用我们的 item-background

JSFiddle

JS:

 var items = [
{ id: 1, item: 'Spectrometer' },
{ id: 2, item: 'Star Chart' },
{ id: 3, item: 'Electrical Tape' }
];

var $select = $('#engagement_question').selectize({
persist: false,
maxItems: 3,
options: items,
labelField: "item",
valueField: "item",
sortField: 'item',
searchField: 'item',
create: true,
render: {
option_create: function (data, escape) {
return '<div class="create">Nytt inlegg<strong> ' + escape(data.input) + '</strong>&hellip;</div>';
}
},
});
var addItemClass = function () {
console.log('entered1');
var input = $.map(items, function (element, index) {
if (element.item == $('.item:last').text())
return element;
else
return null;
});
if (input.length == 0)
{
$('.item:last').css('background-image', 'none');
}
$('.item:last').addClass("item-background");

};

var removeItemClass = function () {
console.log('entered2');
$('.item:last').removeClass("item-background");
//$('.item').css('background-image', 'none');
};

var selectize = $select[0].selectize;
selectize.on('item_add', addItemClass);
selectize.on('option_add', removeItemClass);

CSS

.item-background {
background-color:#000!important;
}

HTML

<select id="engagement_question" multiple>

</select>

关于javascript - Selectize.js - 停止事件 item_add,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41124052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com