사용자 정의 값을 입력하는 옵션이있는 HTML 선택 양식


104

사용자가 맞춤 텍스트 값을 입력하거나 드롭 다운에서 선택할 수있는 입력 필드를 갖고 싶습니다. 일반인 <select>은 드롭 다운 옵션 만 제공합니다.

<select>사용자 정의 값을 수락하려면 어떻게 해야합니까? 예를 들어 : 포드?

<select>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

자바 스크립트를 사용하여 선택 항목에 동적으로 옵션을 추가 할 수 있지만이 정보를 사용하면 정말 고통 스러울 것입니다.
— David

내 웹 사이트 finnmglas.com/contact 에서 사용자 지정 값에 대한 옵션을 추가하지 않았지만 누군가 사용자 지정 값으로 저에게 연락했습니다. 정말 이상합니다
— finnmglas

답변:


249

HTML5에는 기본 제공 콤보 상자가 있습니다. 텍스트 input와 datalist. 그런 다음 의 값을 사용하여 에 list속성을 추가 합니다 .inputiddatalist

업데이트 : 2019 년 3 월 현재 모든 주요 브라우저 (현재 Safari 12.1 및 iOS Safari 12.3 포함) datalist는이 기능에 필요한 수준으로 지원 됩니다. 자세한 브라우저 지원 은 caniuse 를 참조하십시오 .

다음과 같이 보입니다.

<input type="text" list="cars" />
<datalist id="cars">
  <option>Volvo</option>
  <option>Saab</option>
  <option>Mercedes</option>
  <option>Audi</option>
</datalist>


3
이 기능은 약 50 %의 브라우저에서만 지원됩니다. 최신 파이어 폭스, 크롬 및 오페라 만이이를 지원합니다. IE, Safari 및 모바일 브라우저는 그렇지 않습니다. http://caniuse.com/
— markmarijnissen 2014 년

2
2016 년 중반 (2 년 이상 후)이며 대부분의 브라우저는 적어도 심각한 버그 없이는이를 완전히 지원하지 않습니다. 적어도 Safari / Safari iOS를 제외한 거의 모든 최신 버전에서 작동하지만 사용 사례가 제대로 작동하는지 테스트해야합니다. 여전히 최선의 답변입니다.
— 마이클 Gaskill

1
그것은 나를 위해 잘 작동합니다. 대부분의 경우 이전 브라우저를 지원할 필요가 없습니다. 사용자에게 확장 가능한 힌트를 제공하기 위해 입력 필드의 배경에 "아래쪽 화살표"이미지 만 추가했습니다. 코드 (실제 이미지 파일 필요) :<input type="text" list="cars" style="background:url('images/arrow_down.png') no-repeat right center">
— Eugene Kardash

4
나는 최신 버전의 IE, Firefox 및 Chrome에서 모두 정상적으로 작동하도록 테스트했습니다. 나는 이것이 많은 경우에이 일반적인 문제에 대한 아주 간단한 해결책이라고 생각합니다.
— kerl

3
나는 이것을 정말로 사용하고 싶었지만 기본값을 설정해야했다. 사용자는 드롭 다운에서 기본값 만 볼 수 있고 모든 옵션 (필터링되어 있기 때문에)을 볼 수 있습니다. 모든 옵션을보기 전에 입력 필드를 지우는 방법을 알아야합니다.
— Justin

26

Alen Saqe의 최신 JSFiddle은 Firefox에서 저를 위해 전환되지 않았으므로 모든 브라우저 / 장치에서 데이터 목록 태그를 수락하는 날까지 양식 (제출 관련) 내에서 잘 작동하는 간단한 html / javascript 해결 방법을 제공 할 것이라고 생각했습니다. 자세한 내용과 실제 작동을 확인하려면 http://jsfiddle.net/6nq7w/4/ 로 이동 하십시오. 참고 : 토글하는 형제 사이에 공백을 허용하지 마십시오!

<!DOCTYPE html>
<html>
<script>
function toggleField(hideObj,showObj){
  hideObj.disabled=true;        
  hideObj.style.display='none';
  showObj.disabled=false;   
  showObj.style.display='inline';
  showObj.focus();
}
</script>
<body>
<form name="BrowserSurvey" action="#">
Browser: <select name="browser" 
          onchange="if(this.options[this.selectedIndex].value=='customOption'){
              toggleField(this,this.nextSibling);
              this.selectedIndex='0';
          }">
            <option></option>
            <option value="customOption">[type a custom value]</option>
            <option>Chrome</option>
            <option>Firefox</option>
            <option>Internet Explorer</option>
            <option>Opera</option>
            <option>Safari</option>
        </select><input name="browser" style="display:none;" disabled="disabled" 
            onblur="if(this.value==''){toggleField(this,this.previousSibling);}">
<input type="submit" value="Submit">
</form>
</body>
</html>


나는 그 피들을 다시 생각하고 싶다! Firefox의 마녀 버전은 지원되지 않았습니다! 기억 나지 않는 일부 버전으로 테스트했습니다! 명성!
— Alen Saqe 2014

내가 어떤 버전의 FF를 사용했는지 모르겠습니다. 방금 FF34.0을 살펴 보았고 지금 기능이 제공되므로 걱정할 필요가 없습니다. 그러나 기본 토글 옵션 "기타"는 지울 수 있습니다. 값을 편집하여 "기타"를 제거하면 드롭 메뉴가 직관적 인 선택 값을 제공하지 않습니다 (편집 기능에 액세스하기 위해). 나는 이것이 개인적인 취향에 달려 있다고 생각합니다. 필드를 편집 할 수있을 때 드롭 메뉴 화살표가 여전히 존재하기 때문에 사용자는 필드를 편집 할 수 있다는 것을 인식하지 못할 수 있습니다. 당신을 파헤 치지 않습니다. 약간의 피드백입니다. 내 스 니펫은 <form> 내부의 필드 이름 지정도 고려합니다.
— mickmackusa 2014

이 독창적이지만 해독 할 수없는 스크립트 + html의 최종 결과는 선택한 옵션 값 또는 입력 된 텍스트를 쿼리 문자열과 동일한 페이지의 GET에 첨부하는 것입니다. 누구든지 작업을 POST로 변환하는 방법을 알고 있으므로 PHP 파일에서 값을 가져와 거기에서 뭔가를 할 수 있습니까?
— Han

이 스크립트는 HTML 양식 제출에 따라 작동하도록 특정 의도로 작성했습니다. post 메소드를 form 태그의 속성으로 사용하고 있습니까? @Han 격리 된 스 니펫의 3v4l.org 링크를 만들면 빠르게 살펴보고 조언 할 수 있습니다.
— mickmackusa

1
소년 나는 바보 같은 느낌이 든다. 양식 태그에 메서드를 넣는 것을 잊었습니다. 아주 약간의 수정으로 게시 된대로 작동했습니다. <form name = "BrowserSurvey"method = "post"action = "/ gotThis.php"> ... 아름다운 스크립트, mickmackusa. 후속 힌트에 감사드립니다!
— Han

16

jQuery 솔루션!

데모 : http://jsfiddle.net/69wP6/2/

아래 다른 데모 (업데이트 됨!)

일부 고정 옵션이 있고 다른 옵션을 편집 할 수 있기를 원하는 경우 비슷한 것이 필요했습니다! 이 경우 선택 옵션과 겹치는 숨겨진 입력을 만들고 편집 가능하며 jQuery를 사용하여 모든 것이 원활하게 작동하도록했습니다.

나는 여러분 모두와 바이올린을 공유하고 있습니다!

HTML

<div id="billdesc">
    <select id="test">
      <option class="non" value="option1">Option1</option>
      <option class="non" value="option2">Option2</option>
      <option class="editable" value="other">Other</option>
    </select>
    <input class="editOption" style="display:none;"></input>
</div>

CSS

body{
    background: blue;
}
#billdesc{
    padding-top: 50px;
}
#test{
    width: 100%;
    height: 30px;
}
option {
    height: 30px;
    line-height: 30px;
}

.editOption{
    width: 90%;
    height: 24px;
    position: relative;
    top: -30px

}

jQuery

var initialText = $('.editable').val();
$('.editOption').val(initialText);

$('#test').change(function(){
var selected = $('option:selected', this).attr('class');
var optionText = $('.editable').text();

if(selected == "editable"){
  $('.editOption').show();


  $('.editOption').keyup(function(){
      var editText = $('.editOption').val();
      $('.editable').val(editText);
      $('.editable').html(editText);
  });

}else{
  $('.editOption').hide();
}
});

편집 : 사람들이 입력이 끝나는 곳을 명확하게 볼 수 있도록 디자인 현명한 몇 가지 간단한 터치를 추가했습니다!

JS 바이올린 : http://jsfiddle.net/69wP6/4/


11

당신은 정말 할 수 없습니다. 드롭 다운과 텍스트 상자가 모두 있어야하며 양식을 선택하거나 채우도록해야합니다. 자바 스크립트가 없으면 드롭 다운 또는 텍스트 입력을 선택하는 별도의 라디오 버튼 세트를 만들 수 있지만 이것은 나에게 지저분하게 보입니다. 일부 자바 스크립트를 사용하면 선택하는 항목에 따라 하나 또는 다른 옵션을 비활성화 할 수 있습니다. 예를 들어 드롭 다운에 텍스트 필드를 트리거하는 '기타'옵션이 있습니다.


9

데이터 목록 옵션이 요구 사항을 충족하지 않는 경우 Select2 라이브러리 및 " 동적 옵션 생성 "을 살펴보십시오.

$(".js-example-tags").select2({
  tags: true
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>


<select class="form-control js-example-tags">
  <option selected="selected">orange</option>
  <option>white</option>
  <option>purple</option>
</select>


0

위의 솔루션 중 하나 (@mickmackusa)를 사용하여 Hooks를 사용하여 React 16.8+에서 작동하는 프로토 타입을 만들었습니다.

https://codesandbox.io/s/heuristic-dewdney-0h2y2

누군가에게 도움이되기를 바랍니다.


영광입니다. 방금 기록을 확인했는데 이것은 제가 여기 Stack Overflow에서 만든 12 번째 게시물입니다. 백만년 전처럼 느껴집니다.
— mickmackusa

방금 데모 링크를 가지고 놀았는데 두 가지 유형의 필드 사이를 무기한 전환하는 효과를 잃은 것 같습니다.
— mickmackusa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.