#javascript #html
#javascript #HTML
Вопрос:
Я пытаюсь создать текстовое поле, которое увеличивается каждый раз, когда в него добавляется буква на ширину символа. Это то, что я пытаюсь. Это не работает. Если у вас есть подсказка, пожалуйста, поделитесь!
JavaScript:
function MakeWidth(el) {
el.style.width = parseFloat(el.value.clientWidth) }
HTML:
<input id="Test" type="text" style="width: 10px;" onkeyup="MakeWidth(this)"/>
Ответ №1:
Попробуйте size
amp; length
вместо clientWidth
amp; width
function MakeWidth(el) {
el.size = parseInt(el.value.length);
}
которое должно подходить для ваших нужд.
Комментарии:
1. Почему первые несколько символов обрезаются? Пробовал в Firefox.
2. Я не уверен, что это довольно хорошо работает в Chrome 15 и Opera. Попробуйте моноширинный шрифт
3. После некоторого тестирования этот метод не распознает, что ‘W’ и ‘i’ имеют разную ширину в немоноширинных шрифтах. Я ищу решение, которое делает.
4. @Mike: Это действительно проблематично. шрифт monospce — ваша гарантия.
Ответ №2:
Возможно, более полезным будет использовать size
атрибут.
<input id="Test" type="text" size="1" onkeyup="MakeWidth(this)"/>
<script>
function MakeWidth(el) {
el.size = el.value.length
}
</script>
Ответ №3:
Это немного сложно, поскольку вы не обязательно знаете ширину каждого символа. Один маленький трюк, который приходит на ум, заключается в том, что вы могли бы попробовать создать скрытый div с введенным символом, захватить его ширину, добавить его к ширине текстового поля и уничтожить скрытый div.