ブートストラップ3で「x」が付いた検索ボックスをクリアするにはどうすればよいですか?


93

ブートストラップに問題があるので、いくつかの助けが素晴らしいでしょう。ありがとう

私が欲しいもの:(上部)

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

私の現在のコード:

<div class="form-group">
    <input type="text" 
           class="form-control" 
           id="findJobTitle" 
           name="findJobTitle" 
           placeholder="Job Title, Keywords" 
           onkeyup="showResult()"> 
</div>

現在のスクリーンショット:

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

回答:


208

このようなものを得るために

クリアボタンで入力

Bootstrap 3とJqueryでは、次のHTMLコードを使用します。

<div class="btn-group">
  <input id="searchinput" type="search" class="form-control">
  <span id="searchclear" class="glyphicon glyphicon-remove-circle"></span>
</div>

そしていくつかのCSS:

#searchinput {
    width: 200px;
}
#searchclear {
    position: absolute;
    right: 5px;
    top: 0;
    bottom: 0;
    height: 14px;
    margin: auto;
    font-size: 14px;
    cursor: pointer;
    color: #ccc;
}

およびJavascript:

$("#searchclear").click(function(){
    $("#searchinput").val('');
});

もちろん、入力が空の場合に「x」を非表示にしたり、Ajaxリクエストを作成したりするなど、必要な機能についてはさらにJavascriptを記述する必要があります。http://www.bootply.com/121508を参照してください


4
BootplyよりもPlunkerを好む場合は、plnkr.co / edit
c2710u?

2
アクセシビリティの観点からは、#searchclearスパンがボタンである方が良いでしょう。これはインタラクティブな要素なので、インタラクティブな要素としてマークアップします。現状では、キーボードナビゲーションに依存しているユーザーが、それは簡単に(スクリーンリーダーなど)支援技術によってsearchclearスパンにタブ移動できません認識されませんができ
イアン・ディッキンソン

3
この入力を他の要素(アドオン、ドロップダウンなど)とインラインで使用している場合に備えて、これを修正しようとしました。ラッピングdivのクラスを削除し、それをに設定してposition: relative、#searchclear with z-index: 10; top: 10pxand removeを調整しますbottom: 0
RecuencoJones

上、下、高さがあるのは矛盾ではないですか?
nafg 2016

90

超シンプルなHTML 5ソリューション:

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

ソース:HTML 5チュートリアル-入力タイプ:検索

これは少なくともChrome 8、Edge 14、IE 10、Safari 5で機能し、Bootstrapやその他のライブラリを必要としません。(残念ながら、Firefoxはまだ検索クリアボタンをサポートしていないようです。)

検索ボックスに入力すると、「x」が表示され、クリックしてテキストをクリアできます。これは、Firefoxなどの他のブラウザーでは通常の編集ボックス(「x」ボタンなし)として機能するため、Firefoxユーザーは代わりにテキストを選択してDeleteキーを押すか、...

Firefoxでサポートされているこの便利な機能が本当に必要な場合は、input [type = search]要素のポリフィルとしてここに掲載されている他のソリューションの1つを実装できます。ポリフィルは、ユーザーのブラウザーが標準のブラウザー機能をサポートしていない場合に、その機能を自動的に追加するコードです。ブラウザーがそれぞれの機能を実装するときに、ポリフィルを削除できるようになることが期待されます。そしていずれにしても、ポリフィルの実装はHTMLコードをよりクリーンに保つのに役立ちます。

ちなみに、他のHTML 5入力タイプ(「日付」、「数値」、「メール」など)も、通常の編集ボックスに段階的に低下します。一部のブラウザーでは、ファンシーな日付ピッカー、上/下ボタン付きのスピナーコントロール、または(携帯電話では)「@」記号と「.com」ボタンを含む特別なキーボードを使用できますが、私の知る限り、すべてのブラウザーう、少なくともいずれかの認識できない入力タイプのプレーンテキストボックスを表示します。


Bootstrap 3&HTML 5ソリューション

Bootstrap 3は多くのCSSをリセットし、HTML 5検索のキャンセルボタンを壊します。Bootstrap 3 CSSが読み込まれた後、次の例で使用されているCSSで検索キャンセルボタンを復元できます。

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<style>
  input[type="search"]::-webkit-search-cancel-button {
    -webkit-appearance: searchfield-cancel-button;
  }
</style>
<div class="form-inline">
  <input type="search" placeholder="Search..." class="form-control" />
</div>

ソース:HTML 5検索入力がブートストラップで機能しない

このソリューションが最新バージョンのChrome、Edge、Internet Explorerで動作することをテストしました。Safariでテストできません。残念ながら、検索をクリアするための「x」ボタンはFirefoxには表示されませんが、上記のように、この機能をネイティブでサポートしていないブラウザー(Firefoxなど)にポリフィルを実装できます。


2
FWIW:これがChromeで機能するとは思えません。おそらく正式なCSS仕様の一部ではないのでしょうか?W3Schoolsは「検索フィールドは通常のテキストフィールドのように動作する」と述べており、MDNはこの機能について言及していません。MDNは新しい行を削除すると言っていますが、これはこの入力タイプについての説明です。
KyleFarris

3
@KyleFarris上記のどちらの方法も、Chromeバージョン58.0.3029.110(64ビット)では引き続き機能します。クリアボタンが表示される前に、検索ボックスに何かを入力する必要があります。
YipYip 2017年

この高評価の回答は、コンテンツをクリアするテキストボックス内に「クリア」ボタンを表示するというOPの問題にどのように対処しますか?
USR-ローカルΕΨΗΕΛΩΝ

2
すべての主要なブラウザで機能しない場合、それは超単純なソリューションではありません。
thelem

1
@AnandUndavia報告いただきありがとうございます。質問が投稿されたときにOPが使用していた「Bootstrap 3」を指定するように回答を更新しました(2013年に戻った)。時間があるときは、Bootstrap 4で私の回答を機能させることを検討します。
YipYip

23

私はあまりにも多くのカスタムCSSを避けようとし、他のいくつかの例を読んだ後、そこにアイデアをマージしてこの解決策を得ました:

<div class="form-group has-feedback has-clear">
    <input type="text" class="form-control" ng-model="ctrl.searchService.searchTerm" ng-change="ctrl.search()" placeholder="Suche"/>
    <a class="glyphicon glyphicon-remove-sign form-control-feedback form-control-clear" ng-click="ctrl.clearSearch()" style="pointer-events: auto; text-decoration: none;cursor: pointer;"></a>
</div>

ブートストラップのJavaScriptを使用せず、CSSをAngularと一緒に使用するだけなので、クラスhas-clearとform-control-clearは必要なく、AngularJSコントローラーにclear関数を実装しました。ブートストラップのJavaScriptを使用すると、独自のJavaScriptがなくても可能になる場合があります。


1
Xボタンにng-hideを追加して、入力が空の場合に表示されないようにすることもできます。
jrvidotti

クリアボタンng-click="ctrl.searchService.searchTerm = null"およびng-show="ctrl.searchService.searchTerm"
Adrian

18

有線のおかげで、ソリューションは非常にきれいでした。私は水平ブートストラップフォームを使用しており、単一のハンドラーとフォームのCSSを可能にするためにいくつかの変更を加えました。

HTML: - UPDATEDブートストラップの持ち-フィードバックとフォーム・コントロール・フィードバックを使用します

 <div class="container">
  <form class="form-horizontal">
   <div class="form-group has-feedback">
    <label for="txt1" class="col-sm-2 control-label">Label 1</label>
    <div class="col-sm-10">
     <input id="txt1" type="text" class="form-control hasclear" placeholder="Textbox 1">
     <span class="clearer glyphicon glyphicon-remove-circle form-control-feedback"></span>
    </div>
   </div>
   <div class="form-group has-feedback">
    <label for="txt2" class="col-sm-2 control-label">Label 2</label>
    <div class="col-sm-10">
      <input id="txt2" type="text" class="form-control hasclear" placeholder="Textbox 2">
      <span class="clearer glyphicon glyphicon-remove-circle form-control-feedback"></span>
    </div>
   </div>
   <div class="form-group has-feedback">
    <label for="txt3" class="col-sm-2 control-label">Label 3</label>
    <div class="col-sm-10">
     <input id="txt3" type="text" class="form-control hasclear" placeholder="Textbox 3">
     <span class="clearer glyphicon glyphicon-remove-circle form-control-feedback"></span>
    </div>   
   </div>
  </form>
 </div>

javascript:

$(".hasclear").keyup(function () {
    var t = $(this);
    t.next('span').toggle(Boolean(t.val()));
});
$(".clearer").hide($(this).prev('input').val());
$(".clearer").click(function () {
    $(this).prev('input').val('').focus();
    $(this).hide();
});

例: http : //www.bootply.com/130682


8
ブートストラップv3.3.0の後、ポインターイベントをnoneからautoに設定する必要があります。そうしないと、form-control-feedbackをクリックできなくなります。
Vizjerai 2015年

何をし$(".clearer").hide($(this).prev('input').val());ますか?それだけじゃないの$(".clearer").hide();
ジムバック

彼の意図は、入力にすでに値があるかどうかに基づいて非表示/表示を開始するためにhide()に真のパラメーターを渡すことだったと思います。それが意図であった場合、彼は失敗しました(非表示は常に非表示になります)。それはする必要があります$(".clearer").toggle(!!$(this).prev('input').val());
ジェフ・シェプラー

15

AngularJS / UI-Bootstrap Answer

  • Bootstrapのhas-feedbackクラスを使用して、入力フィールド内にアイコンを表示します。
  • アイコンに style="cursor: pointer; pointer-events: all;"
  • ng-clickテキストをクリアするために使用します。

JavaScript(app.js)

var app = angular.module('plunker', ['ui.bootstrap']);

app.controller('MainCtrl', function($scope) {

  $scope.params = {};

  $scope.clearText = function() {
    $scope.params.text = null;
  }

});

HTML(index.htmlスニペット)

      <div class="form-group has-feedback">
        <label>text box</label>
        <input type="text"
               ng-model="params.text"
               class="form-control"
               placeholder="type something here...">
        <span ng-if="params.text"
              ng-click="clearText()"
              class="glyphicon glyphicon-remove form-control-feedback" 
              style="cursor: pointer; pointer-events: all;"
              uib-tooltip="clear">
        </span>
      </div>

ここにプランカーがあります:http ://plnkr.co/edit/av9VFw?p=preview


1

インラインスタイルとスクリプトでそれを行います。

<div class="btn-group has-feedback has-clear">
    <input id="searchinput" type="search" class="form-control" style="width:200px;">
        <a 
id="searchclear" 
class="glyphicon glyphicon-remove-circle form-control-feedback form-control-clear" 
style="pointer-events:auto; text-decoration:none; cursor:pointer;"
onclick="$(this).prev('input').val('');return false;">
</a>
</div>

1

これは、CSSを使用したAngularjs \ Bootstrapの検索およびクリアアイコンを使用した私の実用的なソリューションです。

    <div class="form-group has-feedback has-clear">
                    <input type="search" class="form-control removeXicon" ng-model="filter" style="max-width:100%" placeholder="Search..." />
                    <div ng-switch on="!!filter">
                        <div ng-switch-when="false">
                            <span class="glyphicon glyphicon-search form-control-feedback"></span>
                        </div>
                        <div ng-switch-when="true">
                            <span class="glyphicon glyphicon-remove-sign form-control-feedback" ng-click="$parent.filter = ''" style="pointer-events: auto; text-decoration: none;cursor: pointer;"></span>
                        </div>
                    </div>                        
                </div>

------

CSS

/* hide the built-in IE10+ clear field icon */
.removeXicon::-ms-clear {
  display: none;
}

/* hide the built-in chrome clear field icon */
.removeXicon::-webkit-search-decoration,
.removeXicon::-webkit-search-cancel-button,
.removeXicon::-webkit-search-results-button,
.removeXicon::-webkit-search-results-decoration { 
      display: none; 
}

1

要素IDにバインドせず、「前の」入力要素を使用してクリアします。

CSS:

.clear-input > span {
    position: absolute;
    right: 24px;
    top: 10px;
    height: 14px;
    margin: auto;
    font-size: 14px;
    cursor: pointer;
    color: #AAA;
}

JavaScript:

function $(document).ready(function() {
    $(".clear-input>span").click(function(){
        // Clear the input field before this clear button
        // and give it focus.

        $(this).prev().val('').focus();
    });
});

HTMLマークアップ、好きなだけ使用:

<div class="clear-input">
    Pizza: <input type="text" class="form-control">
    <span class="glyphicon glyphicon-remove-circle"></span>
</div>

<div class="clear-input">
    Pasta: <input type="text" class="form-control">
    <span class="glyphicon glyphicon-remove-circle"></span>
</div>

-7

画像(キャンセルアイコン)を絶対位置で配置し、上部と左のプロパティを調整し、入力フィールドをクリアするメソッドonclickイベントを呼び出します。

<div class="form-control">
    <input type="text" id="inputField" />
</div>
<span id="iconSpan"><img src="icon.png" onclick="clearInputField()"/></span>

cssでは、それに応じてスパンを配置し、

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