2010-05-26 4 views
66

Я хотел бы иметь текстовое поле ввода, содержащее знак «$» в самом начале, и независимо от того, какое редактирование происходит в поле, чтобы знак был постоянным.Текстовое поле ввода текста с символом валюты

Было бы хорошо, если бы только номера были приняты для ввода, но это просто причудливое дополнение.

ответ

74

Рассмотрите возможность моделирования поля ввода с помощью фиксированного префикса или суффикса с использованием пролета с рамкой вокруг поля ввода без полей. Вот простой пример стартовый:

.currencyinput { 
 
    border: 1px inset #ccc; 
 
} 
 
.currencyinput input { 
 
    border: 0; 
 
}
<span class="currencyinput">$<input type="text" name="currency"></span>

+0

Большое спасибо! Это решение, которое выполнило эту работу для меня. Отлично! – User3419

+10

Кроме того, вы можете обернуть «$» внутри тега

+0

@Cohen. Хотя хорошая идея, наличие нескольких ярлыков [может вызвать проблемы с доступностью] (http://stackoverflow.com/a/ 3992160/1094772). – rybo111

2

Поместите '$' перед полем ввода текста, а не внутри него. Это делает проверку числовых данных намного проще, потому что вам не нужно разбирать «$» после отправки.

Вы можете с JQuery.validate() (или другими) добавить некоторые правила проверки на стороне клиента, которые обрабатывают валюту. Это позволит вам иметь «$» внутри поля ввода. Но вам все равно придется выполнять проверку на стороне сервера для обеспечения безопасности, и это возвращает вас к необходимости удалить «$».

+1

Спасибо! Я знал об этом, но мне действительно нужно, чтобы мой знак валюты находился внутри текстового поля. Ниже приведен лучший ответ, который, по моему мнению, может помочь многим людям. – User3419

+0

@Hristo: Я рад, что вы нашли решение, которое подходит. Но для записи тот, который вы отметили как ответ, не помещает ваше ** ** в поле ввода.Это только делает ** кажется **, чтобы быть там с укладкой. Тем не менее, это определенно пятно! – dnagirl

+1

Да, это визуально решает проблему, в то время как ваше предложение просто указывает (да, все еще в правильном направлении), но я бы не назвал это решением. Еще раз спасибо и помните, что я не собирался никого обижать здесь! – User3419

0

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

HTML:

<input type="image" alt="Subscribe" src="/graphics/icons/search-button.png"> 
<input type="text" placeholder="Search" name="query"> 

CSS:

#search input[type="image"] { 
background-color: transparent; 
border: 0 none; 
margin-top: 10px; 
vertical-align: middle; 
margin: 5px 0 0 5px; 
position: absolute; 
} 

Это приводит к входу на левой боковой панели здесь:

https://fsfe.org

32

Используйте родительский .input-icon дела. Необязательно добавьте .input-icon-right.

<div class="input-icon"> 
    <i>$</i> 
    <input type="text"> 
</div> 

<div class="input-icon input-icon-right"> 
    <i>€</i> 
    <input type="text"> 
</div> 

Совместите значок вертикально transform и top и установите pointer-events в none так, что щелчки сосредоточиться на входе. Отрегулируйте padding и width соответствующим образом:

.input-icon { 
    position: relative; 
} 

.input-icon > i { 
    position: absolute; 
    display: block; 
    transform: translate(0, -50%); 
    top: 50%; 
    pointer-events: none; 
    width: 25px; 
    text-align: center; 
    font-style: normal; 
} 

.input-icon > input { 
    padding-left: 25px; 
    padding-right: 0; 
} 

.input-icon-right > i { 
    right: 0; 
} 

.input-icon-right > input { 
    padding-left: 0; 
    padding-right: 25px; 
    text-align: right; 
} 

В отличие от принятого ответа, это сохранит проверки ввода на первый план, например, красной границы, когда есть ошибка.

JSFiddle usage example with Bootstrap and Font Awesome

+2

Спасибо за 'указатели-события: нет', люблю находить маленькие детали вроде этого – brichins

+1

Это приятное решение! –

+1

Согласовано, хорошее решение! – dave4jr

1

Если вам нужно только поддерживать Safari, вы можете сделать это следующим образом:

input.currency:before { 
    content: attr(data-symbol); 
    float: left; 
    color: #aaa; 
} 

и поле ввода, как

<input class="currency" data-symbol="€" type="number" value="12.9">

Таким образом, вы не» t нужен дополнительный тег и сохраните информацию о символе в разметке.

+6

: до и: после CSS псевдоселекторов можно использовать только для тегов контейнера и не работает для тега ввода. http://stackoverflow.com/questions/2587669/css-after-pseudo-element-on-input-field –

+1

Как жаль, вы правы. Я тестировал его только в Safari ... – Sebastian

16

Вы можете обернуть свое поле ввода в диапазон, который вы position:relative;. Затем вы добавите :beforecontent:"€" ваш символ валюты и сделайте это position:absolute. Работа JSFiddle

HTML

<span class="input-symbol-euro"> 
    <input type="text" /> 
</span> 

CSS

.input-symbol-euro { 
    position: relative; 
} 
.input-symbol-euro input { 
    padding-left:18px; 
} 
.input-symbol-euro:before { 
    position: absolute; 
    top: 0; 
    content:"€"; 
    left: 5px; 
} 

Update Если вы хотите поставить символ евро либо на левую или правую сторону от текстового поля. Работа JSFiddle

HTML

<span class="input-euro left"> 
    <input type="text" /> 
</span> 
<span class="input-euro right"> 
    <input type="text" /> 
</span> 

CSS

.input-euro { 
    position: relative; 
} 
.input-euro.left input { 
    padding-left:18px; 
} 
.input-euro.right input { 
    padding-right:18px; 
    text-align:end; 
} 

.input-euro:before { 
    position: absolute; 
    top: 0; 
    content:"€"; 
} 
.input-euro.left:before { 
    left: 5px; 
} 
.input-euro.right:before { 
    right: 5px; 
} 
+0

Это очень близко к тому, что я хочу, но вход не фиксируется на ширине страницы и не может использовать абсолютный. Относительный также перемещает символ вокруг. Как мы можем установить положение абсолютное/относительно входного левого верхнего угла? – nwolybug

+0

Валюта евро всегда отображается справа. Вы должны поместить свой символ справа, а не влево. – jadok

+0

Im french и цена всегда написана как 2.50 €, а не 2.50 евро, и я уверен, что другая страна в еврозоне сделает то же самое. – jadok

9

Поскольку вы не можете сделать ::before с content: '$' на входах и добавление абсолютно позиционированный элемент добавляет дополнительную HTML - мне нравится делать на фоне SVG inline css.

Это звучит примерно так:

input { 
    width: 85px; 
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='16px' width='85px'><text x='2' y='13' fill='gray' font-size='12' font-family='arial'>$</text></svg>"); 
    padding-left: 12px; 
} 

Он выводит следующее:

svg dollar sign background css

Примечание: код все должны быть на одной линии. Поддержка в современных браузерах довольно хороша, но обязательно проверьте.

+0

Лучшее решение, потому что ему не нужна дополнительная разметка, очень элегантная. Благодаря! –

+1

Хорошее решение. Я закончил тем, что добавил «background-repeat: no-repeat;», когда в поле ввода повторялся символ $. – Hamid

0

Для начальной загрузки его работы

<span class="form-control">$ <input type="text"/></span> 

Не использовать класс = "форм-контроль" в поле ввода.

0

.currencyinput { 
 
    border: 1px inset #ccc; 
 
    padding-bottom: 1px;//FOR IE & Chrome 
 
} 
 
.currencyinput input { 
 
    border: 0; 
 
}
<span class="currencyinput">$<input type="text" name="currency"></span>

+0

Код без пояснения мало помогает OP или будущим зрителям этого ответа. Вы должны объяснить, как это отвечает на вопрос. – leigero

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