Editable dropdown list

Allow to add editable dropdown list and make editable only if "Other" is selected.

by Tarek Faham

HTML

<span>Dropdown using SELECT and INPUT:</span>
<div class="select-editable">
    <select onchange="updateEditable(this)" data-onload= "makeEditable(this)" >
        <option value=""></option>
        <option value="115x175 mm">115x175 mm</option>
        <option value="120x160 mm">120x160 mm</option>
        <option value="120x287 mm">120x287 mm</option>
        <option value="Other">Other</option>
    </select>
    <input type="text" name="format" value="" />
</div>
<span>Dropdown using DATALIST and INPUT:</span>
<div class="select-editable">
    <input list="browsers" name="format" value="" oninput="updateEditable(this)" />
    <datalist id="browsers">
      <option value="Internet Explorer">
      <option value="Firefox">
      <option value="Chrome">
      <option value="Opera">
      <option value="Safari">
      <option value="Other">
    </datalist>    
</div>

CSS

.select-editable {
     position:relative;
     background-color:white;
     border:solid grey 1px;
     width:120px;
     height:18px;
 }
 .select-editable select {
     position:absolute;
     top:0px;
     left:0px;
     font-size:14px;
     border:none;
     width:120px;
     margin:0;
 }
 .select-editable input {
     position:absolute;
     top:0px;
     left:0px;
     width:100px;
     padding:1px;
     font-size:12px;
     border:none;
 }
 .select-editable select:focus, .select-editable input:focus {
     outline:none;
 }

JavaScript

$(document).ready(function(){
   $('[data-onload]').each(function(){
    eval($(this).data('onload'));
	});
});

function updateEditable(elm) {
	elm.nextElementSibling.value=elm.value;
  console.log(elm.value);
  makeEditable(elm);
}
function makeEditable(elm) {
  debugger;
	var nextSbl;
	if ($(elm).is("select")) {
   	nextSbl = elm.nextElementSibling;
    if (elm.value == "Other") {
      nextSbl.readOnly = false;
    } else {
      nextSbl.readOnly = true;
    }
  } else {
    if (elm.value != "Other" && !$(elm).attr("keypressOff")) {
    	$(elm).keypress(function(event) {
        console.log("keypress preventd")
      	event.preventDefault();
      })
    } else {
    	$(elm).off("keypress");
      $(elm).attr("keypressOff", true);
      console.log("keypress event removed")
    }
  }
}