참고 datalist
A와 동일하지 않습니다 select
. 사용자가 목록에없는 사용자 지정 값을 입력 할 수 있으며, 먼저 정의하지 않고는 이러한 입력에 대한 대체 값을 가져올 수 없습니다.
사용자 입력을 처리하는 가능한 방법은 입력 된 값을있는 그대로 제출하거나 빈 값을 제출하거나 제출을 방지하는 것입니다. 이 답변은 처음 두 가지 옵션 만 처리합니다.
사용자 입력을 완전히 허용하지 않으려면 select
더 나은 선택이 될 수 있습니다.
option
드롭 다운에 의 텍스트 값만 표시 하기 위해 내부 텍스트를 사용하고 value
속성 은 제외 합니다. 보내려는 실제 값은 사용자 정의 data-value
속성에 저장됩니다 .
이를 제출하려면 data-value
우리는을 사용해야합니다 <input type="hidden">
. 이 경우 name="answer"
일반 입력에서를 생략 하고 숨겨진 복사본으로 이동합니다.
<input list="suggestionList" id="answerInput">
<datalist id="suggestionList">
<option data-value="42">The answer</option>
</datalist>
<input type="hidden" name="answer" id="answerInput-hidden">
이렇게하면 원래 입력의 텍스트가 변경 될 때 javascript를 사용하여 텍스트 datalist
가 data-value
. 이 값은 숨겨진 입력에 삽입되고 제출됩니다.
document.querySelector('input[list]').addEventListener('input', function(e) {
var input = e.target,
list = input.getAttribute('list'),
options = document.querySelectorAll('#' + list + ' option'),
hiddenInput = document.getElementById(input.getAttribute('id') + '-hidden'),
inputValue = input.value;
hiddenInput.value = inputValue;
for(var i = 0; i < options.length; i++) {
var option = options[i];
if(option.innerText === inputValue) {
hiddenInput.value = option.getAttribute('data-value');
break;
}
}
});
스크립트가 어떤 입력이 어떤 숨겨진 버전에 속하는지 알기 위해서는 id answer
와 answer-hidden
일반 및 숨겨진 입력이 필요합니다. 이렇게하면 제안을 제공하는 input
하나 이상의를 사용하여 동일한 페이지에 여러를 가질 수 datalist
있습니다.
모든 사용자 입력은있는 그대로 제출됩니다. 사용자 입력이 데이터 목록에 없을 때 빈 값을 제출하려면 다음 hiddenInput.value = inputValue
으로 변경하십시오 .hiddenInput.value = ""
작업 jsFiddle 예제 : 일반 자바 스크립트 및 jQuery
value=""
이있을 때마다 태그 내의 문자열보다 우선해야하는 것 같습니다value=""
. 따라서 제안은 "답변"을 귀하의 가치 속성으로 만드는 것입니다.