2016-03-23 4 views
0

Как видно из названия государств, у меня есть выбор выпадающий список с фиксированной шириной 80px, как это:Как отобразить вторую половину текста в раскрывающемся списке выбора HTML?

enter image description here

<select id="dd_country_code_2" name="dd_country_code_2" style="width: 120px; height: 23px;"> 
    <option value="SEL">(Country code)</option> 
    <option value="AF">Afghanistan ‏(‎+93)</option> 
    <option value="AL">Albania ‏(‎+355)</option> 
    <option value="DO">Dominican Republic ‏(‎+1)</option> 
    <option value="FK">Falkland Islands ‏(‎+500)</option> 
</select> 

Когда пользователь выбирает опцию, это результат:

enter image description here

Но вместо этого я хочу, чтобы вторая половина текста отображалась в 80px списка, чтобы пользователь мог четко видеть свой код страны.

Например:

enter image description here

Как я могу добиться этого?

+0

Это выглядит очень плохо, как пользовательский интерфейс, как Неправительственный профессиональный сайт. Зачем вам это нужно? – LGSon

+0

Я хочу, чтобы это избегало любых ошибок пользователей (чтобы выбрать коды страны вместо их написания) ... Кроме того, (полный) список был взят из шаблона, поэтому я не могу его переформатировать. . – MinimalTech

+0

Зачем нужна фиксированная ширина? ... Вот почему это выглядит очень плохо, когда нужно сузить – LGSon

ответ

1

Поскольку ширина проблема, вот еще один способ, где, когда элемент списка является большим, он получает отрезан.

Обновлено, используя псевдо держать стрелку вниз, таким образом можно сделать input полную ширину/высоту

(function() { 
 
    document.querySelector('select').addEventListener('change', function(e) { 
 
    var val = e.target.options[ e.target.selectedIndex ].text.split('('); 
 
    if (val[0].length > 12) { 
 
     val[0] = val[0].slice(0, 10) + '...'; 
 
    }  
 
    e.target.nextElementSibling.value = val.join('('); 
 
    }); 
 
})();
.selectable { 
 
    position:relative; 
 
    background-color:white; 
 
    border:solid grey 1px; 
 
    width:120px; 
 
    height:18px; 
 
    overflow: hidden; 
 
    font-size: 12px; 
 
} 
 
.selectable:after { 
 
    content: '\25BC'; 
 
    position: absolute; 
 
    top: 0; 
 
    right: 0; 
 
    width:14px; 
 
    height:18px; 
 
    line-height:20px; 
 
    pointer-events: none; 
 
    font-size: 10px; 
 
    text-align: center 
 
} 
 
.selectable select { 
 
    position:absolute; 
 
    top:0px; 
 
    left:0px; 
 
    font-size: inherit; 
 
    border:none; 
 
    width:120px; 
 
    margin:0; 
 
} 
 
.selectable input { 
 
    position:absolute; 
 
    top:0px; 
 
    left:0px; 
 
    width:100%; 
 
    height:100%; 
 
    padding:1px; 
 
    font-size: inherit; 
 
    border:none; 
 
    pointer-events: none; 
 
} 
 
.selectable select:focus, .selectable input:focus { 
 
    outline:none; 
 
}
<div class="selectable"> 
 
    <select> 
 
    <option value="SEL">(Country code)</option> 
 
    <option value="AF">Afghanistan (+93)</option> 
 
    <option value="AL">Albania (+355)</option> 
 
    <option value="DO">Dominican Republic (+1)</option> 
 
    <option value="FK">Falkland Islands (+500)</option> 
 
    </select> 
 
    <input type="text" name="countrycode" value="(Country code)" /> 
 
</div>

+0

Во-первых, спасибо за вашу версию решения, но это решение имеет две основные проблемы для меня: 1) Список берется «как есть» из шаблона, он очень широк, поэтому я не могу редактировать все записи один -by-one by hand и 2) Слишком сложно для пользователя знать, что нужно навести указатель мыши на имя и подождать, пока всплывающая подсказка не будет отображаться, чтобы понять, что скрывает точки ... Я не понимаю, почему @ Решение MarioD не работает во мне ... – MinimalTech

+0

@MinimalTech Да, я понимаю обе проблемы, так что вам нужна небольшая ширина при выборе, но во время выбора вы хотите показать все это, правильно? .. и если да, может быть способ, используя скрипт, поэтому дайте мне знать, и я смотрю на него. – LGSon

+0

Вы ссылаетесь на нечто вроде «динамической ширины , которая может вести себя как описание, которое я дал в (в моем вопросе) - или что-то вроде решения MarioD, которое прекрасно работает внутри фрагмента кода Stack Overflow, но оно работает с половиной функциональности во мне, и я не могу понять, почему! – MinimalTech

4

Вы можете использовать собственность direction: rtl; css.

(function() { 
 
    document.querySelector('select').addEventListener('change', function(e) { 
 
    e.target.style.direction = 'ltr'; 
 
    if(e.target.selectedIndex > 0) { 
 
     e.target.style.direction = 'rtl'; 
 
    }; 
 
    }); 
 
})();
#dd_country_code_2 { 
 
    width: 120px; 
 
}
<select id="dd_country_code_2" name="dd_country_code_2" style="height: 23px;"> 
 
    <option value="SEL">(Country code) </option> 
 
    <option value="AF">Afghanistan (+93) </option> 
 
    <option value="AL">Albania (+355) </option> 
 
    <option value="DO">Dominican Republic (+1) </option> 
 
    <option value="FK">Falkland Islands (+500)</option> 
 
</select>

+0

извините, эта проблема остается, но с обратным направлением на этот раз ... – MinimalTech

+0

Обновлено с изменениями. – MarioD

+0

Выглядит очень хорошо, но я не могу заставить его работать на моем сайте. Я поместил скрипт внутри тегов, внутри , но он работает неправильно (я использую Firefox 45.0.1) ... Если я выберу страну из список, стрелка идет влево, и текст становится для ex. «(+355) Албания», как и ваше первое издание ... У него нет функциональности «фрагмента кода» стека переполнения. – MinimalTech

Смежные вопросы