값 세트가있는 드롭 다운을 원하지만 사용자가 여기에 나열되지 않은 새 값을 “선택”할 수 있도록합니다.
나는 것을 알 선택 2는 당신이 그것을 사용하는 경우이 지원 tags
모드하지만 태그를 사용하지 않고 할 수있는 방법이 있나요?
답변
버전 4 이상의 경우 Kevin Brown의 아래 답변을 확인하십시오.
Select2 3.5.2 이하에서는 다음과 같이 사용할 수 있습니다.
$(selector).select2({
minimumInputLength:1,
"ajax": {
data:function (term, page) {
return { term:term, page:page };
},
dataType:"json",
quietMillis:100,
results: function (data, page) {
return {results: data.results};
},
"url": url
},
id: function(object) {
return object.text;
},
//Allow manually entered text in drop down.
createSearchChoice:function(term, data) {
if ( $(data).filter( function() {
return this.text.localeCompare(term)===0;
}).length===0) {
return {id:term, text:term};
}
},
});
(select2 메일 링리스트의 답변에서 가져 왔지만 지금 링크를 찾을 수 없음)
답변
우수한 대답 에 의해 제공 @fmpwizard는 선택 2 3.5.2 이하 작동, 하지만 4.0.0에서 작동하지 않습니다 .
초창기부터 (이 질문만큼 빠르지는 않음) Select2는 사용자가 허용하는 경우 자신의 가치를 추가 할 수있는 “태그 지정”을 지원했습니다. 이것은 tags
옵션을 통해 활성화 할 수 있으며 문서의 예제를 가지고 놀 수 있습니다 .
$("select").select2({
tags: true
});
기본적으로 입력 한 검색어와 동일한 텍스트가있는 옵션이 생성됩니다. 특별한 방법으로 표시하려는 경우 사용되는 개체를 수정하거나 선택한 후 원격으로 개체를 만들 수 있습니다.
$("select").select2({
tags: true,
createTag: function (params) {
return {
id: params.term,
text: params.term,
newOption: true
}
}
});
select2:select
이벤트 를 통해 전달 된 개체에서 쉽게 발견 할 수있는 플래그 역할을하는 것 외에도 추가 속성을 사용하면 결과에서 옵션을 약간 다르게 렌더링 할 수 있습니다. 따라서 옆 에 ” (new) ” 를 넣어 새 옵션이라는 사실을 시각적으로 알리고 싶다면 다음과 같이 할 수 있습니다.
$("select").select2({
tags: true,
createTag: function (params) {
return {
id: params.term,
text: params.term,
newOption: true
}
},
templateResult: function (data) {
var $result = $("<span></span>");
$result.text(data.text);
if (data.newOption) {
$result.append(" <em>(new)</em>");
}
return $result;
}
});
답변
코드를 유지하기 위해 그의 의견 에서 @rrauenza Fiddle의 코드 를 게시 하고 있습니다.
HTML
<input type='hidden' id='tags' style='width:300px'/>
jQuery
$("#tags").select2({
createSearchChoice:function(term, data) {
if ($(data).filter(function() {
return this.text.localeCompare(term)===0;
}).length===0)
{return {id:term, text:term};}
},
multiple: false,
data: [{id: 0, text: 'story'},{id: 1, text: 'bug'},{id: 2, text: 'task'}]
});
답변
이러한 답변 중 많은 부분이 4.0 이상에서 작동하지 않기 때문에 ajax를 사용하는 경우 서버가 새 값을 옵션으로 추가하도록 할 수 있습니다. 따라서 다음과 같이 작동합니다.
- 사용자가 값을 검색 (서버에 ajax 요청)
- 가치가 큰 경우 옵션을 반환하십시오. 서버가 다음과 같은 옵션을 추가하지 않으면 :
[{"text":" my NEW option)","id":"0"}]
- 양식이 제출되면 해당 옵션이 db에 있는지 확인하고 저장하기 전에 작성하지 않았는지 확인하십시오.
답변
답변
@fmpwizard 답변에 대한 개선 :
//Allow manually entered text in drop down.
createSearchChoice:function(term, data) {
if ( $(data).filter( function() {
return term.localeCompare(this.text)===0; //even if the this.text is undefined it works
}).length===0) {
return {id:term, text:term};
}
},
//solution to this error: Uncaught TypeError: Cannot read property 'localeCompare' of undefined
답변
나는 방금 Kevin Brown으로부터 이것을 우연히 발견했습니다.
https://stackoverflow.com/a/30019966/112680
당신이해야 할 모든 v4.0.6
사용입니다 tags: true
매개 변수입니다.