入力テキスト内のアイコンをクリア


185

(Google検索ボックスのように)入力要素自体を消去するために右側にアイコンが付いたテキスト入力要素をすばやく作成する方法はありますか?

周りを見回しましたが、入力要素の背景としてアイコンを配置する方法しか見つかりませんでした。jQueryプラグインか何か他にありますか?

次のような入力テキスト要素内にアイコンが必要です。

--------------------------------------------------
|                                               X|
--------------------------------------------------

3
入力ボックスの上に画像を配置するjQueryプラグイン?何か不足していますか?!
クリスチャン、

1
@Christian Sciberras私が選択した答えからわかるように、それはjqueryプラグインである可能性があります...
Giovanni Di Milia

1
jQueryプラグインを使用して、プレーンなアラートボックスを表示できます。それはあなたが本当にしなければならないという意味ではありません、そして、ほとんどの場合、それは過度に設計された膨張です。ちなみに、選択したのはjQueryプラグインはなく、 javascript、html、cssの組み合わせです。プラグインは、関連する詳細を含むjQueryシグネチャを持つ単一のファイル/スクリプトです。
クリスチャン

1
@Christian Sciberras:jQueryプラグインとJavaScriptとCSSの混合を区別できます。私が言っていたのは、何かいいことをしたいのなら、画像だけを入力ボックスに置くことはできないということです。
Giovanni Di Milia

この問題を探している人も、この情報が必要になります。「検索」HTML5入力のクリアをどのように検出しますか?
ブラソフィロ

回答:


342

type="search"入力にa を追加します
。サポートはかなりまともですが、IE <10では機能しません。

<input type="search">

古いブラウザのクリア可能な入力

IE9サポートが必要な場合は、ここにいくつかの回避策があります

標準<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">&times;</i>
</span>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

aのみを使用<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>

jsBinデモ

トリックは、いくつかの右パディング(私は18pxを使用)をに設定inputし、見えないところ(私はを使用right -10px center)からbackground-imageを右に押すことです。
この18pxのパディングにより、アイコンの下にテキストが表示されなくなります(表示されている間)。
jQは、明確なアイコンを表示するクラスxinput値がある場合)を追加します。
ここで必要なのは、jQでクラスの入力をターゲットとし、マウスがその18px "x"領域内にあるかどうかxを検出するmousemoveことだけです。内部にある場合は、クラスを追加しonXます。クラスを
クリックすると、onXすべてのクラスが削除され、入力値がリセットされ、アイコンが非表示になります。


7x7px gif: クリアアイコン7x7

Base64文字列:

data:image/gif;base64,R0lGODlhBwAHAIAAAP///5KSkiH5BAAAAAAALAAAAAAHAAcAAAIMTICmsGrIXnLxuDMLADs=

5
このコードのアイデアをいくつか借りて、タグクラウドジェネレーターを作成しました(純粋なcssタグとupvoteおよびdownvoteボタンを使用)。お使いのブラウザで問題ないようです。jsfiddle.net/7PnKSで
mrBorna

1
うわー、本当に素晴らしい解決策。それが私が探しているものです。ありがとうございました。しかし、「x」イメージをBootstrap 3グリフィコンを使用するように変更するにはどうすればよいですか?グリフィコンはフォントであるため、ズームアウトした方が表示が良くなります。
user1995781 2013年

1
いいですが、背景画像は他のCSSと衝突する可能性があります。wldaunfrによる以下の回答は、きちんとしたjQueryプラグインに関するものです:plugins.jquery.com/clearsearch
Nick Westgate

1
最新のFirefoxとChromeでうまく動作します。しかし、iOSで動作するように変更.on('touchstart click', '.onX', ...する.on('touchstart click', '.onX, .x', ...必要がありました。
kritzikratzi

1
@ RokoC.Buljanもう一度テストしました。結果は次のとおりです。1)入力テキストボックスに数文字を入力します。2)「X」アイコンが表示されます。3)試してみました。注:この時点では、iPhoneキーボードはまだアクティブで非表示にはなりません。4)[完了]ボタンをクリックしてキーボードを非表示にしてから[X]アイコンをクリックすると、テキストが正しくクリアされます。iPhoneのキーボードが表示されているときに「X」が付いたテキストをクリアできないようです。
源泉徴収

61

これをhtml 5準拠のブラウザに限定しても問題ない場合は、単に次のように使用します。

<input type="search" />

JS Fiddleデモ

確かに、Chromium(Ubuntu 11.04)では、クリアテキストの画像/機能が表示される前にinput要素内にテキストが必要です。

参照:


11
他の開発者へのヘルプ:ブートストラップCSSプラットフォームを使用している場合は、スタイル「-webkit-appearance:textfield;」を削除してください。bootstrap.cssでinput [type = "search"] {-webkit-box-sizing:content-box; -moz-box-sizing:content-box; box-sizing:content-box; -webkit-appearance:textfield; }
Riccardo Bassilichi 2014年

1
Xの色を変更する方法はありますか?
rotaercz 2015年

1
@RiccardoBassilichi私のcssファイルを拡張して、元のbootstrap.cssを編集してこれを機能させる必要がないようにする方法はありますか?
スーパーサン2015年

私は違うと思います!しかし、私はCSSウィザードではありません!:-(
Riccardo Bassilichi 2015年

2
残念ながら、これは、Firefoxでサポートされていない、次を参照してください。developer.mozilla.org/en-US/docs/Web/CSS/...
ギヨームHusta

27

画像でスタイル設定されたリセットボタンを使用できます...

<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/63


10
これにより、1つのフィールドだけではなく、フォーム全体がリセットされます
konung

入力が空のときにリセット画像を非表示にする方法は?KOGIが実例を挙げていただけますか?
ハリー

24

CSSだけでクリア可能なテキストボックスを作成しました。動作させるためにJavaScriptコードは必要ありません

以下はデモリンクです

http://codepen.io/shidhincr/pen/ICLBD


1
優れた!ブラウザのサポートに関する情報が参考になります。
Ian Newson

1
今日の私にとっては、FF 27.0.1で壊れています。
Nick Westgate

3
テキストは、「x」ボタンのためのスペースを空けるために再配置されていません。ボタンの後ろのテキストは見えません。
CrimsonChris 2015年

これにより、1つのフィールドだけでなくフォーム全体がクリアされます。
エリックヴェランド

23

MDNよれば<input type="search" />現在、すべての最新ブラウザでサポートされています。

入力タイプ=検索

<input type="search" value="Clear this." />


ただし、ブラウザー間で一貫した異なる動作が必要な場合は、JavaScriptのみを必要とする軽量の代替手段があります。

オプション1-常に「x」を表示する:(ここの例)

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>&times;</span>
</div>

<div class="clearable-input">
  <input type="text" value="Clear this." />
  <span data-clear-input>&times;</span>
</div>

オプション2-フィールドにカーソルを合わせると「x」のみが表示されます:(ここの例)

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>&times;</span>
</div>

<div class="clearable-input">
  <input type="text" value="Clear this." />
  <span data-clear-input>&times;</span>
</div>

オプション3- 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>&times;</span>
</div>

<div class="clearable-input">
  <input type="text" value="Clear this." />
  <span data-clear-input>&times;</span>
</div>


9

本当に飛んソリューションのどれもが私たちの要件を満たしていないので、我々はと呼ばれる簡単なjQueryプラグインを思い付いたのjQuery-ClearSearch -

使い方は次のように簡単です:

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

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

例:http : //jsfiddle.net/wldaunfr/FERw3/


Firefox 45での作業
Jeff Davis

1
最新のGoogle Chrome(v.70〜2018年11月)では機能していないようです
Ben Clarke

3

編集:私はこのリンクを見つけました。それが役に立てば幸い。http://viralpatel.net/blogs/2011/02/clearable-textbox-jquery.html

入力テキストの右側にそれが欲しいと述べました。したがって、最良の方法は、入力ボックスの横に画像を作成することです。ボックスの内側を探している場合は、背景画像を使用できますが、ボックスをクリアするスクリプトを作成できない場合があります。

したがって、テキストボックスをクリアするJavaScriptコードを挿入して画像を記述します。


入力ボックスの右側を意味していましたが、入力自体の内部では、Googleのように
Giovanni Di Milia

ボタンを模した背景画像を使用し、次のコードを使用します<input type="text" name="Search" value="Search..." onclick="this.value='';">
Jaspero

これは私が何をしたいではありません。私はアイコンが欲しいものだけクリックされたクリアされた場合、入力....
ジョヴァンニ・ディミリア

3

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 : //jsfiddle.net/VTvNX/


1

このようなもの?? Jsfiddleデモ

    <!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">&cross;</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>

1
<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>

1

このコマンドで実行できます(Bootstrapなし)。

Array.from(document.querySelectorAll('.search-field')).forEach(field => {
  field.querySelector('span').addEventListener('click', e => {
    field.querySelector('input').value = '';
  });
});
:root {
  --theme-color: teal;
}

.wrapper {
  width: 80%;
  margin: 0 auto;
}

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 var(--theme-color);
  border-radius: 5px;
  box-sizing: border-box;
}

span {
  position: absolute;
  top: 0;
  right: 0;
  margin: 8px 0;
  padding: 13px 15px;
  color: var(--theme-color);
  font-weight: bold;
  cursor: pointer;
}
span:after {
  content: '\2716';
}
<div class="wrapper">
  <div class="search-field">
    <input placeholder="Search..." />
    <span></span>
  </div>
</div>


0

ここにjQueryプラグインがあります(そして最後にデモがあります)。

http://jsfiddle.net/e4qhW/3/

私は主に例(および個人的な課題)を説明するためにそれを行いました。賛成票は歓迎されますが、他の回答は時間どおりに配布され、正当な承認を受けるに値します。

それでも、私の意見では、UIライブラリの一部にならない限り、それは過度に設計された膨張です。


コンテンツをクリアして、もう一度入力を開始すると... xボタンはもうありません
ロコC.ブルジャン

hahahaは2年前のバグのように見えます;)この
辺で


0

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>

このようなものを取得する:

ここに画像の説明を入力してください



0

CSSや画像ファイルを含める必要はありません。その重砲のjQuery UIライブラリ全体を含める必要はありません。私はあなたのために魔法をかける軽量のjQueryプラグインを書きました。必要なのはあるjQueryプラグイン。=)

jQuery InputSearchスニークピーク

ここでフィドル:jQuery InputSearchデモ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.