(Google検索ボックスのように)入力要素自体を消去するために右側にアイコンを持つ入力テキスト要素を作成する簡単な方法はありますか?
私は周りを見回しましたが、私は入力要素の背景としてアイコンをどのように置くかを発見しました。 jQueryプラグインなどはありますか?
私は、入力テキスト要素の中にアイコンが欲しいのです。
--------------------------------------------------
| X|
--------------------------------------------------
入力にtype="search"
を追加してください
サポートはかなりまともですが、 IE <10 では機能しません。
<input type="search">
IE9 support が必要な場合は、いくつかの回避策があります。
<input type="text">
といくつかのHTML要素を使う:/**
* Clearable text inputs
*/
$(".clearable").each(function() {
var $inp = $(this).find("input:text"),
$cle = $(this).find(".clearable__clear");
$inp.on("input", function(){
$cle.toggle(!!this.value);
});
$cle.on("touchstart click", function(e) {
e.preventDefault();
$inp.val("").trigger("input");
});
});
/* Clearable text inputs */
.clearable{
position: relative;
display: inline-block;
}
.clearable input[type=text]{
padding-right: 24px;
width: 100%;
box-sizing: border-box;
}
.clearable__clear{
display: none;
position: absolute;
right:0; top:0;
padding: 0 8px;
font-style: normal;
font-size: 1.2em;
user-select: none;
cursor: pointer;
}
.clearable input::-ms-clear { /* Remove IE default X */
display: none;
}
<span class="clearable">
<input type="text" name="" value="" placeholder="">
<i class="clearable__clear">×</i>
</span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input class="clearable" type="text">
のみを使用する(追加の要素はありません)class="clearable"
を設定し、その背景画像で遊んでください。
/**
* Clearable text inputs
*/
function tog(v){return v?'addClass':'removeClass';}
$(document).on('input', '.clearable', function(){
$(this)[tog(this.value)]('x');
}).on('mousemove', '.x', function( e ){
$(this)[tog(this.offsetWidth-18 < e.clientX-this.getBoundingClientRect().left)]('onX');
}).on('touchstart click', '.onX', function( ev ){
ev.preventDefault();
$(this).removeClass('x onX').val('').change();
});
// $('.clearable').trigger("input");
// Uncomment the line above if you pre-fill values from LS or server
/* Clearable text inputs */
.clearable{
background: #fff url(http://i.stack.imgur.com/mJotv.gif) no-repeat right -10px center;
border: 1px solid #999;
padding: 3px 18px 3px 4px; /* Use the same right padding (18) in jQ! */
border-radius: 3px;
transition: background 0.4s;
}
.clearable.x { background-position: right 5px center; } /* (jQ) Show icon */
.clearable.onX{ cursor: pointer; } /* (jQ) hover cursor style */
.clearable::-ms-clear {display: none; width:0; height:0;} /* Remove IE default X */
<input class="clearable" type="text" name="" value="" placeholder="" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
トリックは、いくつかの右パディング(私は18pxを使った)をinput
に設定し、背景画像を見えないように右にプッシュする(私はright -10px center
を使った)。
この18ピクセルのパディングは、テキストがアイコンの下に隠れるのを防ぎます(表示中)。
jQはクラスx
を追加し(input
に値がある場合)、クリアアイコンを表示します。
jQでクラスx
の入力をターゲットにし、マウスがその18pxの "x"領域内にあるかどうかをmousemove
で検出するだけで十分です。内側にある場合は、クラスonX
を追加します。onX
クラスをクリックすると、すべてのクラスが削除され、入力値がリセットされてアイコンが非表示になります。
7×7ピクセルのGIF:
Base64文字列:
data:image/gif;base64,R0lGODlhBwAHAIAAAP///5KSkiH5BAAAAAAALAAAAAAHAAcAAAIMTICmsGrIXnLxuDMLADs=
HTML 5に準拠したブラウザに限定されても問題ない場合は、次のように入力してください。
<input type="search" />
確かに、Chromium(Ubuntu 11.04)では、これはinput
要素の中にテキストがあることを要求しますbefore平文の画像/機能が現れるでしょう。
参照:
あなたは画像でスタイル設定されたリセットボタンを使用することができます...
<form action="" method="get">
<input type="text" name="search" required="required" placeholder="type here" />
<input type="reset" value="" alt="clear" />
</form>
<style>
input[type="text"]
{
height: 38px;
font-size: 15pt;
}
input[type="text"]:invalid + input[type="reset"]{
display: none;
}
input[type="reset"]
{
background-image: url( http://png-5.findicons.com/files/icons/1150/tango/32/edit_clear.png );
background-position: center center;
background-repeat: no-repeat;
height: 38px;
width: 38px;
border: none;
background-color: transparent;
cursor: pointer;
position: relative;
top: -9px;
left: -44px;
}
</style>
ここで実際にそれを参照してください。 http://jsbin.com/uloli3/6
CSSでクリア可能なテキストボックスを作成しました。動作させるためにJavaScriptコードを必要としません。
以下はデモリンクです
MDNによると 、<input type="search" />
は現在すべての最近のブラウザでサポートされています。
<input type="search" value="Clear this." />
ただし、ブラウザー間で一貫性のあるさまざまな動作が必要な場合は、JavaScriptのみが必要な軽量の代替手段がいくつかあります。
Array.prototype.forEach.call(document.querySelectorAll('.clearable-input>[data-clear-input]'), function(el) {
el.addEventListener('click', function(e) {
e.target.previousElementSibling.value = '';
});
});
.clearable-input {
position: relative;
display: inline-block;
}
.clearable-input > input {
padding-right: 1.4em;
}
.clearable-input > [data-clear-input] {
position: absolute;
top: 0;
right: 0;
font-weight: bold;
font-size: 1.4em;
padding: 0 0.2em;
line-height: 1em;
cursor: pointer;
}
.clearable-input > input::-ms-clear {
display: none;
}
<p>Always display the 'x':</p>
<div class="clearable-input">
<input type="text" />
<span data-clear-input>×</span>
</div>
<div class="clearable-input">
<input type="text" value="Clear this." />
<span data-clear-input>×</span>
</div>
Array.prototype.forEach.call(document.querySelectorAll('.clearable-input>[data-clear-input]'), function(el) {
el.addEventListener('click', function(e) {
e.target.previousElementSibling.value = '';
});
});
.clearable-input {
position: relative;
display: inline-block;
}
.clearable-input > input {
padding-right: 1.4em;
}
.clearable-input:hover > [data-clear-input] {
display: block;
}
.clearable-input > [data-clear-input] {
display: none;
position: absolute;
top: 0;
right: 0;
font-weight: bold;
font-size: 1.4em;
padding: 0 0.2em;
line-height: 1em;
cursor: pointer;
}
.clearable-input > input::-ms-clear {
display: none;
}
<p>Only display the 'x' when hovering over the field:</p>
<div class="clearable-input">
<input type="text" />
<span data-clear-input>×</span>
</div>
<div class="clearable-input">
<input type="text" value="Clear this." />
<span data-clear-input>×</span>
</div>
input
要素に値がある場合にのみ 'x'を表示します。 (ここの例)Array.prototype.forEach.call(document.querySelectorAll('.clearable-input'), function(el) {
var input = el.querySelector('input');
conditionallyHideClearIcon();
input.addEventListener('input', conditionallyHideClearIcon);
el.querySelector('[data-clear-input]').addEventListener('click', function(e) {
input.value = '';
conditionallyHideClearIcon();
});
function conditionallyHideClearIcon(e) {
var target = (e && e.target) || input;
target.nextElementSibling.style.display = target.value ? 'block' : 'none';
}
});
.clearable-input {
position: relative;
display: inline-block;
}
.clearable-input > input {
padding-right: 1.4em;
}
.clearable-input >[data-clear-input] {
display: none;
position: absolute;
top: 0;
right: 0;
font-weight: bold;
font-size: 1.4em;
padding: 0 0.2em;
line-height: 1em;
cursor: pointer;
}
.clearable-input > input::-ms-clear {
display: none;
}
<p>Only display the 'x' if the `input` element has a value:</p>
<div class="clearable-input">
<input type="text" />
<span data-clear-input>×</span>
</div>
<div class="clearable-input">
<input type="text" value="Clear this." />
<span data-clear-input>×</span>
</div>
飛んでいるソリューションのどれも実際に私達の要求を満たさなかったので、 jQuery-ClearSearch - と呼ばれる簡単なjQueryプラグインを思い付きました。
それを使用するのと同じくらい簡単です:
<input class="clearable" type="text" placeholder="search">
<script type="text/javascript">
$('.clearable').clearSearch();
</script>
Googleのようにしたいのであれば、 "X"は実際には<input>
の内側にはないことを知っておく必要があります。外側のコンテナはテキストボックスのように表示されるように並んでいます。
HTML:
<form>
<span class="x-input">
<input type="text" class="x-input-text" />
<input type="reset" />
</span>
</form>
CSS:
.x-input {
border: 1px solid #ccc;
}
.x-input input.x-input-text {
border: 0;
outline: 0;
}
編集:このリンクが見つかりました。それが役に立てば幸い。 http://viralpatel.net/blogs/2011/02/clearable-textbox-jquery.html
あなたはそれが入力テキストの右側に欲しいと言っています。そのため、最善の方法は、入力ボックスの横に画像を作成することです。あなたが箱の中に何かを見ているならば、あなたは背景画像を使うことができます、しかしあなたは箱をクリアするためにスクリプトを書くことができないかもしれません。
そのため、テキストボックスをクリアするためのJavaScriptコードを挿入してイメージを作成して作成します。
<form action="" method="get">
<input type="text" name="search" required="required" placeholder="type here" />
<input type="reset" value="" alt="clear" />
</form>
<style>
input[type="text"]
{
height: 38px;
font-size: 15pt;
}
input[type="text"]:invalid + input[type="reset"]{
display: none;
}
input[type="reset"]
{
background-image: url( http://png-5.findicons.com/files/icons/1150/tango/32/edit_clear.png );
background-position: center center;
background-repeat: no-repeat;
height: 38px;
width: 38px;
border: none;
background-color: transparent;
cursor: pointer;
position: relative;
top: -9px;
left: -44px;
}
</style>
このようなもの?? Jsfiddle Demo
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
.searchinput{
display:inline-block;vertical-align: bottom;
width:30%;padding: 5px;padding-right:27px;border:1px solid #ccc;
outline: none;
}
.clearspace{width: 20px;display: inline-block;margin-left:-25px;
}
.clear {
width: 20px;
transition: max-width 0.3s;overflow: hidden;float: right;
display: block;max-width: 0px;
}
.show {
cursor: pointer;width: 20px;max-width:20px;
}
form{white-space: nowrap;}
</style>
</head>
<body>
<form>
<input type="text" class="searchinput">
</form>
<script src="jquery-1.11.3.min.js" type="text/javascript"></script> <script>
$(document).ready(function() {
$("input.searchinput").after('<span class="clearspace"><i class="clear" title="clear">✗</i></span>');
$("input.searchinput").on('keyup input',function(){
if ($(this).val()) {$(".clear").addClass("show");} else {$(".clear").removeClass("show");}
});
$('.clear').click(function(){
$('input.searchinput').val('').focus();
$(".clear").removeClass("show");
});
});
</script>
</body>
</html>
私はjQueryとブートストラップを使って簡単なコンポーネントを書きました。試してみてください。 https://github.com/mahpour/bootstrap-input-clear-button
これがjQueryプラグイン(そして最後のデモ)です。
私は主に例(そして個人的な挑戦)を説明するためにそれをしました。賛成投票は大歓迎ですが、他の答えは時間通りに配布されており、それらの正当な認識に値する。
それでも、私の意見では、それは過剰に設計された膨大なものです(それがUIライブラリーの一部にならない限り)。
jQuery Mobileにはこれが組み込まれています。
<input type="text" name="clear" id="clear-demo" value="" data-clear-btn="true">
Jqueryプラグインを使用して、カスタマイズされたオプションを追加し、新しいプラグインを作成することで自分のニーズに合わせました。あなたはそれをここで見つけることができます:https://github.com/david-dlc-cerezo/jquery-clearField
簡単な使い方の例:
<script src='http://code.jquery.com/jquery-1.9.1.js'></script>
<script src='http://code.jquery.com/ui/1.10.3/jquery-ui.js'></script>
<script src='src/jquery.clearField.js'></script>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
<link rel="stylesheet" href="css/jquery.clearField.css">
<table>
<tr>
<td><input name="test1" id="test1" clas="test" type='text'></td>
<td>Empty</td>
</tr>
<tr>
<td><input name="test2" id="test2" clas="test" type='text' value='abc'></td>
<td>Not empty</td>
</tr>
</table>
<script>
$('.test').clearField();
</script>
このようなものを入手する:
このコマンドで(Bootstrapなしで)できます。
div {
position: relative;
}
input {
background:none;
outline:none;
display: inline-block;
width: 100%;
margin: 8px 0;
padding: 13px 15px;
padding-right: 42.5px;
border: 1px solid teal;
border-radius: 5px;
box-sizing: border-box;
}
span {
position: absolute;
top: 0;
right: 0;
margin: 8px 0;
padding: 13px 15px;
color: teal;
font-weight: bold;
cursor: pointer;
}
<div>
<input placeholder="Prueba" />
<span>✖</span>
</div>
CSSや画像ファイルを含める必要はありません。その大砲兵jQuery UIライブラリ全体を含める必要はありません。私はあなたのために魔法をする軽量のjQueryプラグインを書きました。必要なのはjQuery
とプラグインだけです。 =)
ここをいじる:jQuery InputSearchデモ。