Як я можу помістити чітку кнопку у вікно введення тексту HTML, як у iPhone?


131

Я хочу мати маленьку маленьку піктограму, яка при натисканні видалить текст у вікні <INPUT>.

Це для економії місця, а не для того, щоб мати чітке посилання поза полем для введення.

Мої навички CSS слабкі ... Ось фото на скріншоті того, як виглядає iPhone.

Відповіді:


93

@thebluefox узагальнив найбільше. Ви також змушені використовувати JavaScript, щоб все-таки ця кнопка працювала. Ось SSCCE, ви можете скопіювати'n'paste'n'run:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 2803532</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $('input.deletable').wrap('<span class="deleteicon" />').after($('<span/>').click(function() {
                    $(this).prev('input').val('').trigger('change').focus();
                }));
            });
        </script>
        <style>
            span.deleteicon {
                position: relative;
            }
            span.deleteicon span {
                position: absolute;
                display: block;
                top: 5px;
                right: 0px;
                width: 16px;
                height: 16px;
                background: url('http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=4') 0 -690px;
                cursor: pointer;
            }
            span.deleteicon input {
                padding-right: 16px;
                box-sizing: border-box;
            }
        </style>
    </head>
    <body>
        <input type="text" class="deletable">
    </body>
</html>

Живий приклад тут .

jQuery , до речі, не потрібен, він просто добре відокремлює логіку, необхідну для прогресивного вдосконалення від вихідного, ви, звичайно, також можете продовжувати звичайний HTML / CSS / JS:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 2803532, with "plain" HTML/CSS/JS</title>
        <style>
            span.deleteicon {
                position: relative;
            }
            span.deleteicon span {
                position: absolute;
                display: block;
                top: 5px;
                right: 0px;
                width: 16px;
                height: 16px;
                background: url('http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=4') 0 -690px;
                cursor: pointer;
            }
            span.deleteicon input {
                padding-right: 16px;
                box-sizing: border-box;
            }
        </style>
    </head>
    <body>
        <span class="deleteicon">
            <input type="text">
            <span onclick="var input = this.previousSibling; input.value = ''; input.focus();"></span>
        </span>
    </body>
</html>

Ви закінчуєте лише більш потворний HTML (і JS;), не сумісний із кроссбордсом).

Зауважте, що коли UI look'n'feel не є вашою найбільшою турботою, але функціональність є, тоді просто використовуйте <input type="search">замість цього <input type="text">. Він відобразить кнопку (очищення від конкретного браузера) для браузерів, що підтримують HTML5.


7
можна зробити чітку кнопку прихованою, коли текстове поле порожнє?
корінь

У IE9 текст пливе під значком хреста.
седовав

з моменту зміни теми, URL для зображення більше не є правильним. Старе зображення можна отримати на веб-
zacaj

1
Ви також можете використовувати приголомшливі шрифтові значки з class="fa fa-remove"внутрішнього прольоту, щоб відобразити хороший значок хреста
singe3

Я використовував чисту версію Javascript, і вона спрацювала добре, за винятком центрування кнопки на Win / Linux Firefox / Chrome. Я вирішив це, видаливши top:дочірній проміжок і встановивши display: flex; align-items: center;в батьківський проміжок.
thomasa88

157

На сьогоднішній день з HTML5 це досить просто:

<input type="search" placeholder="Search..."/>

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

просте поле введення HTML5 пошуку

(Якщо ви використовуєте Bootstrap, вам доведеться додати перезапис у файл css, щоб він відображався)

input[type=search]::-webkit-search-cancel-button {
    -webkit-appearance: searchfield-cancel-button;
}

поле введення для завантажувального пошуку

Веб-браузери Safari / WebKit також можуть надавати додаткові функції при використанні type="search", як-от results=5і autosave="...", але вони також перекривають багато ваших стилів (наприклад, висоту, межі). Щоб запобігти цим перекриттям, зберігаючи функціональність, наприклад кнопку X, ви можете додати це до свого css:

input[type=search] {
    -webkit-appearance: none;
}

Перегляньте сторінку css-tricks.com для отримання додаткової інформації про функції, які надає компанія type="search".


3
Відмінна відповідь, без участі коду. На жаль, не підтримується багатьма браузерами. Не забудьте, це додаткова функція Chrome у моєму продукті :)
guillaumepotier

49

HTML5 представляє тип введення "Пошук", який, на мою думку, робить те, що вам потрібно.

<input type="search" />

Ось живий приклад .


4
Хоча тип "пошуку" підтримується всіма останніми браузерами (перевірте підтримку тут: wufoo.com/html5), кнопка очищення не відображається у Firefox (32.0.3) або Opera (12.17).
justaoterprogrammer

9
кнопка очищення також не відображається в останніх Chrome
tsayen

3
Якщо ви використовуєте Bootstrap, він може змінити поведінку за замовчуванням
aexl

У пов'язаному кодексі CodePen відсутня коса риса закриття у вході, тому якщо ви хочете, щоб він працював на CodePen, просто додайте косу рису закриття.
Gen1-1

@ Gen1-1 ой, схоже на те, що публічне завантаження відключено blog.codepen.io/2019/08/06/anonymous-pen-save-option-removed якщо хтось має фіксовану кодову ручку, будь ласка, не соромтесь редагувати та допомогти виправити демо
ThorSummoner

24

Перевірте наш плагін jQuery-ClearSearch . Це налаштований плагін jQuery - адаптувати його до ваших потреб шляхом стилізації поля введення просто. Просто використовуйте його наступним чином:

<input class="clearable" type="text" placeholder="search">

<script type="text/javascript">
    $('.clearable').clearSearch();
</script>

Приклад: http://jsfiddle.net/wldaunfr/FERw3/


Це дивовижно, але я б радив додати в "$ (window) .resize (function () {sproveBtn ()});" в jquery.clearsearch.js, одразу після $ this.on ('фокус зміни клавіатури при зміні фокусу', тригерBtn); | Так що вікна розміру не зіпсують положення хреста
Ng Sek Long

17

На жаль, ви не можете помістити його в текстове поле, на жаль, лише зробіть його схожим на його всередині, що, на жаль, означає, що потрібен деякий css: P

Теорія полягає в загортанні введення в розділ, зніміть усі межі та фони від введення, а потім накресліть поділ так, щоб він виглядав як поле. Потім вкажіть кнопку після поля введення коду та завдань good'un.

Після того, як ви все одно працюєте;)


6

Я отримав креативне рішення, я думаю, що ви шукаєте

$('#clear').click(function() {
  $('#input-outer input').val('');
});
body {
  font-family: "Tahoma";
}
#input-outer {
  height: 2em;
  width: 15em;
  border: 1px #e7e7e7 solid;
  border-radius: 20px;
}
#input-outer input {
  height: 2em;
  width: 80%;
  border: 0px;
  outline: none;
  margin: 0 0 0 10px;
  border-radius: 20px;
  color: #666;
}
#clear {
  position: relative;
  float: right;
  height: 20px;
  width: 20px;
  top: 5px;
  right: 5px;
  border-radius: 20px;
  background: #f1f1f1;
  color: white;
  font-weight: bold;
  text-align: center;
  cursor: pointer;
}
#clear:hover {
  background: #ccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="input-outer">
  <input type="text">
  <div id="clear">
    X
  </div>
</div>

https://jsfiddle.net/qdesign/xn9eogmx/1/


3

Звичайно, найкращим підходом є використання постійно підтримуваних <input type="search" /> .

У всякому разі для трохи цікавого кодування я подумав, що це може бути досягнуто також за допомогою кнопки скидання форми, і це робочий результат (варто зазначити, що не можуть жити інші входи, окрім поля пошуку при такому підході, або кнопка скидання стирається їх теж), javascript не потрібен:

form > div{
    position: relative;
    width: 200px;
}

form [type="text"] {
    width: 100%;
    padding-right: 20px;
}

form [type="reset"] {
    position: absolute;
    border: none;
    display: block;
    width: 16px;
    border-radius: 20px;
    top: 2px;
    bottom: 2px;
    right: -20px;
    background-color: #ddd;
    padding: 0px;
    margin: 0px;
}
<form>
	<div>
		<input type="text" />
		<input type="reset" value="X" />
	</div>
</form>


1

Можливо, це просте рішення допоможе:

<input type="text" id="myInput" value="No War"/><button onclick="document.getElementById('myInput').value = ''" title="Clear">X</button></input>


Хоча цей код може вирішити проблему ОП, настійно рекомендується надати додатковий контекст стосовно того, чому та / або як цей код відповідає на питання. Відповіді з коду, як правило, стають марними в довгостроковій перспективі, оскільки майбутні глядачі, які відчувають подібні проблеми, не можуть зрозуміти міркування рішення.
Е. Зейтинці

-1

@Mahmoud Ali Kaseem

Я щойно змінив деякі CSS, щоб він виглядав інакше, і додав фокус ();

https://jsfiddle.net/xn9eogmx/81/

$('#clear').click(function() {
  $('#input-outer input').val('');
  $('#input-outer input').focus();
});
body {
  font-family: "Arial";
  font-size: 14px;
}
#input-outer {
  height: 2em;
  width: 15em;
  border: 1px #777 solid;
  position: relative;
  padding: 0px;
  border-radius: 4px;
}
#input-outer input {
  height: 100%;
  width: 100%;
  border: 0px;
  outline: none;
  margin: 0 0 0 0px;
  color: #666;
  box-sizing: border-box;
  padding: 5px;
  padding-right: 35px;
  border-radius: 4px;
}
#clear {
  position: absolute;
  float: right;
  height: 2em;
  width: 2em;
  top: 0px;
  right: 0px;
  background: #aaa;
  color: white;
  text-align: center;
  cursor: pointer;
  border-radius: 0px 4px 4px 0px;
}
#clear:after {
  content: "\274c";
  position: absolute;
  top: 4px;
  right: 7px;
}
#clear:hover,
#clear:focus {
  background: #888;
}
#clear:active {
  background: #666;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="input-outer">
  <input type="text">
  <div id="clear"></div>
</div>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.