Я хочу иметь красивую маленькую иконку, которая при щелчке очистит текст в <INPUT> коробка.
Это для экономии места, а не для четкой связи вне поля ввода.
Мои навыки CSS слабы... Вот фотография , как выглядит iPhone.
Я хочу иметь красивую маленькую иконку, которая при щелчке очистит текст в <INPUT> коробка.
Это для экономии места, а не для четкой связи вне поля ввода.
Мои навыки CSS слабы... Вот фотография , как выглядит iPhone.
@thebluefox суммировал больше всего. Вы также вынуждены использовать JavaScript, чтобы эта кнопка работала в любом случае. Вот SSCCE, вы можете скопировать и запустить его:
<!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 (и не совместимый с JB;);)).
Обратите внимание, что когда внешний вид пользовательского интерфейса не является вашей главной задачей, но функциональность такова, тогда просто используйте <input type="search">
вместо <input type="text">
. На браузерах с поддержкой HTML5 будет отображаться кнопка очистки (для браузера).
В настоящее время с HTML5 это довольно просто:
<input type="search" placeholder="Search..."/>
Большинство современных браузеров автоматически выдают удобную кнопку очистки в поле по умолчанию.
(Если вы используете 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"
.
HTML5 вводит тип ввода "поиск", который, как я считаю, делает то, что вы хотите.
<input type="search" />
Здесь живой пример.
Ознакомьтесь с нашим jQuery-ClearSearch плагином. Это настраиваемый плагин jQuery - адаптация его к вашим потребностям путем моделирования поля ввода является простым. Просто используйте его следующим образом:
<input class="clearable" type="text" placeholder="search">
<script type="text/javascript">
$('.clearable').clearSearch();
</script>
Вы не можете на самом деле поместить его в текстовое поле, но только сделайте его похожим на его внутри, что, к сожалению, означает, что требуется какой-то css: P
Теория обертывает вход в div, берет все границы и фоны с входа, а затем стирает div, чтобы он выглядел как поле. Затем запустите свою кнопку после поля ввода в коде и задания good'un.
Как только вы все равно заработаете;)
У меня есть творческое решение, я думаю, что вы ищете
$('#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>
Конечно, лучший подход - использовать все более поддерживаемый <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>
@Махмуд Али Касейм
Я только что изменил CSS, чтобы он выглядел по-другому и добавил focus();
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>