Как вставить '$' в теги ввода? [Дубликат]

Если для строки может быть всегда доверено, вы можете использовать eval (или использовать literal_eval, как было предложено, это безопасно, независимо от того, какая строка.) В противном случае вам нужен синтаксический анализатор. Парсер JSON (например, simplejson) будет работать, если он только когда-либо хранит контент, соответствующий схеме JSON.

80
задан halfer 21 September 2016 в 19:50
поделиться

13 ответов

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

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

79
ответ дан Carlos Muñoz 18 August 2018 в 23:32
поделиться

.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
ответ дан Christian Bocaz 18 August 2018 в 23:32
поделиться
  • 1
    Код без объяснений мало помогает ФП или будущим зрителям этого ответа. Вы должны объяснить, как это отвечает на вопрос. – leigero 19 October 2016 в 20:40
  • 1
    Да, я действительно хочу, чтобы знак валюты находился внутри поля, но спасибо за ссылку ограничения на ввод! – User3419 26 May 2010 в 17:19

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

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

2
ответ дан dnagirl 18 August 2018 в 23:32
поделиться
  • 1
    Спасибо! Я знал об этом, но мне действительно нужно, чтобы мой знак валюты находился внутри текстового поля. Ниже приведен лучший ответ, который, по моему мнению, может помочь многим людям. – User3419 26 May 2010 в 17:31
  • 2
    @Hristo: Я рад, что вы нашли решение, которое подходит. Но для записи тот, который вы отметили в качестве ответа, не помещает ваше поле $ в поле в поле ввода. Это только заставляет казаться быть там с стилем. Тем не менее, это определенно пятно! – dnagirl 26 May 2010 в 18:13
  • 3
    Да, это визуально решает проблему, в то время как ваше предложение просто указывает (да, все еще в правильном направлении), но я бы не назвал это решением. Еще раз спасибо и помните, что я не собирался никого обижать здесь! – User3419 26 May 2010 в 21:00

Поскольку вы не можете делать ::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;
}

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

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

10
ответ дан Jeff Callahan 18 August 2018 в 23:32
поделиться
  • 1
    Лучшее решение, потому что ему не нужна дополнительная разметка, очень элегантная. Благодаря! – Vincens von Bibra 15 November 2017 в 11:47
  • 2
    Хорошее решение. В итоге я добавил background-repeat: no-repeat;, когда в поле ввода повторялся символ $. – Hamid 12 February 2018 в 03:03

Для бутстрапа его работы

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

Не используйте class = "form-control" в поле ввода.

0
ответ дан Jestin 18 August 2018 в 23:32
поделиться

Вы можете обернуть свое поле ввода в диапазон, который вы position:relative;. Затем вы добавляете с :before content:"€" свой символ валюты и делаете его 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;
}

Обновление Если вы хотите поместить символ евро либо на левой или правой части текстового поля. Работа 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;
 }
22
ответ дан Philipp Hofmann 18 August 2018 в 23:32
поделиться
  • 1
    Это очень близко к тому, что я хочу, но вход не является неподвижным при ширине страницы и не может использовать абсолютный. Относительный также перемещает символ вокруг. Как мы можем установить положение абсолютное / относительно входного левого верхнего угла? – nwolybug 26 May 2015 в 22:13
  • 2
    Валюта евро всегда отображается справа. Вы должны поместить свой символ справа, а не влево. – jadok 2 November 2015 в 12:18
  • 3
    Я французский, и цена всегда написана как 2,50 €, а не 2,50 евро, и я уверен, что другая страна в еврозоне делает то же самое. – jadok 7 November 2015 в 19:52
  • 4
    @jadok Я живу в Нидерландах, здесь цены написаны как € 2,50. – Vincent Kok 16 February 2016 в 12:49
  • 5
    @VincentKok После того, как спросят вокруг, кажется, что это зависит от страны, страна Латинской Европы (Франция, Испания, ...) поместит ее справа, а северная / восточная европейская страна слева, вы можете попробовать ее с помощью амазоны на примере : www.amazone.fr, www.amazone.nl, ... – jadok 22 February 2016 в 18:31

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

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

<div class="input-icon input-icon-right">
  <input type="text">
  <i>€</i>
</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 с помощью Bootstrap и шрифта Awesome

39
ответ дан rybo111 18 August 2018 в 23:32
поделиться
  • 1
    Спасибо за pointer-events:none, люблю найти маленькие детали, подобные этому – brichins 6 November 2015 в 16:32
  • 2
    Это хорошее решение! – Leopoldo Sanczyk 1 April 2016 в 00:06
  • 3
    Согласованное, приятное решение! – dave4jr 4 July 2016 в 11:32
  • 4
    Я хотел это с помощью кнопки в одной аккуратной строке и должен был добавить float:left в input-symbol div – kluka 1 August 2016 в 10:03
  • 5
    работает красиво, спасибо! – Random 16 March 2018 в 04:09

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

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

0
ответ дан Sam Tuke 18 August 2018 в 23:32
поделиться

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

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

и поле ввода, например

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

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

1
ответ дан Sebastian 18 August 2018 в 23:32
поделиться
  • 1
    : before и: после псевдоселекторов CSS могут использоваться только для тегов контейнера и не работают для тега ввода. [Д0] stackoverflow.com/questions/2587669/… – Venkatesh Nannan 23 July 2013 в 02:33
  • 2
    Как жаль, ты прав. Я только тестировал его в Safari ... – Sebastian 23 July 2013 в 15:33

Ни один из этих ответов не поможет, если вы заинтересованы в выравнивании левой границы с другими текстовыми полями в форме ввода.

Я бы рекомендовал позиционировать знак доллара абсолютно влево около -10px или left 5px (зависит от того, хотите ли вы внутри или вне поля ввода). Внутреннее решение требует направления: rtl на входе css.

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

<div style="display:inline-block">
 <div style="position:relative">
  <div style="position:absolute; left:-10px;">$</div>
 </div>
 <input type='text' />
</div>

или

<div style="display:inline-block">
 <div style="position:relative">
  <div style="position:absolute; left:5px;">$</div>
 </div>
 <input type='text' style='direction: rtl;' />
</div>

https://i.imgur.com/ajrU0T9.png

Пример: https://plnkr.co/edit/yshyuRMd06K1cuN9tFDv?p=preview

0
ответ дан Ted Scheckler 18 August 2018 в 23:32
поделиться
  • 1
    Ни один из ответов не поможет в этом, потому что это не тот вопрос, который задан. Символ должен быть внутри ввода. – rybo111 22 May 2018 в 17:50
  • 2
    Технически ответы css не помещают знак доллара внутри контейнера ввода. Я думаю, что принятое решение css представляет сложную проблему выравнивания при применении к типичной форме. Как показано здесь: plnkr.co/edit/uhOfLw5WB6DIn2le9GZm?p=preview – Ted Scheckler 23 May 2018 в 14:50
  • 3
    Я обновил это решение, чтобы поместить знак доллара внутри входа: plnkr.co/edit/yshyuRMd06K1cuN9tFDv?p=preview (позиция абсолютная левая 5px и установка направления ввода в rtl) – Ted Scheckler 23 May 2018 в 14:57
-1
ответ дан Johnson Carneiro 30 October 2018 в 11:15
поделиться
0
ответ дан Andy 30 October 2018 в 11:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: