Bagaimana cara mengosongkan kotak pencarian dengan 'x' di bootstrap 3?

94

Mengalami masalah dengan bootstrap, jadi bantuan akan sangat membantu. Terima kasih

Yang saya mau: (bagian atas)

masukkan deskripsi gambar di sini

Kode saya saat ini:

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

Tangkapan Layar Saat Ini:

masukkan deskripsi gambar di sini

K2SO Ghost Spirit
sumber

Jawaban:

209

Untuk mendapatkan sesuatu seperti ini

masukan dengan tombol hapus

dengan Bootstrap 3 dan Jquery gunakan kode HTML berikut:

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

dan beberapa CSS:

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

dan Javascript:

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

Tentu saja Anda harus menulis lebih banyak Javascript untuk fungsionalitas apa pun yang Anda butuhkan, misalnya menyembunyikan 'x' jika inputnya kosong, membuat permintaan Ajax, dan sebagainya. Lihat http://www.bootply.com/121508

tidak diinginkan
sumber
4
Jika seseorang lebih memilih Plunker daripada Bootply, ini dia: plnkr.co/edit/c2710u?p=preview
tanguy_k
2
Dari sudut pandang aksesibilitas, akan lebih baik jika #searchclearspan menjadi tombol. Ini adalah elemen interaktif, jadi tandai sebagai elemen interaktif. Saat ini, pengguna yang mengandalkan navigasi keyboard tidak dapat beralih ke rentang pencarian yang jelas, dan tidak akan mudah dikenali oleh teknologi pendukung (seperti pembaca layar)
Ian Dickinson
3
Saya baru saja mencoba memperbaikinya jika Anda menggunakan input ini sejajar dengan elemen lain (seperti addons, dropdown, dll) Hapus saja kelas div pembungkus, atur ke position: relativedan kemudian sesuaikan #searchclear dengan z-index: 10; top: 10pxdan hapusbottom: 0
RecuencoJones
Bukankah kontradiksi memiliki atasan, bawahan, dan tinggi badan?
nafg
98

Solusi HTML 5 super sederhana:

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

Sumber: Tutorial HTML 5 - Jenis Input: Pencarian

Itu berfungsi setidaknya di Chrome 8, Edge 14, IE 10, dan Safari 5 dan tidak memerlukan Bootstrap atau pustaka lainnya. (Sayangnya, tampaknya Firefox belum mendukung tombol hapus pencarian.)

Setelah mengetik di kotak pencarian, 'x' akan muncul yang dapat diklik untuk menghapus teks. Ini masih akan berfungsi sebagai kotak edit biasa (tanpa tombol 'x') di browser lain, seperti Firefox, jadi pengguna Firefox dapat memilih teks dan menekan delete, atau ...

Jika Anda benar-benar membutuhkan fitur bagus untuk dimiliki ini yang didukung di Firefox, maka Anda dapat menerapkan salah satu solusi lain yang diposting di sini sebagai polyfill untuk elemen input [type = search]. Polyfill adalah kode yang secara otomatis menambahkan fitur browser standar saat browser pengguna tidak mendukung fitur tersebut. Seiring waktu, harapannya adalah Anda dapat menghapus polyfill karena browser menerapkan fitur masing-masing. Dan bagaimanapun juga, implementasi polyfill dapat membantu menjaga kode HTML lebih bersih.

Omong-omong, jenis input HTML 5 lainnya (seperti "tanggal", "angka", "email", dll.) Juga akan diturunkan dengan baik ke kotak edit biasa. Beberapa browser mungkin memberi Anda alat pilih tanggal yang keren, kontrol pemintal dengan tombol atas / bawah, atau (pada ponsel) keyboard khusus yang menyertakan tanda '@' dan tombol '.com', tetapi setahu saya, semua browser akan setidaknya menunjukkan kotak teks biasa untuk semua jenis masukan yang belum diakui.


Solusi Bootstrap 3 & HTML 5

Bootstrap 3 me-reset banyak CSS dan merusak tombol batal pencarian HTML 5. Setelah CSS Bootstrap 3 dimuat, Anda dapat memulihkan tombol batal pencarian dengan CSS yang digunakan dalam contoh berikut:

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

Sumber: Input Pencarian HTML 5 Tidak Bekerja dengan Bootstrap

Saya telah menguji bahwa solusi ini berfungsi di versi terbaru Chrome, Edge, dan Internet Explorer. Saya tidak dapat menguji di Safari. Sayangnya, tombol 'x' untuk menghapus pencarian tidak muncul di Firefox, tetapi seperti di atas, polyfill dapat diterapkan untuk browser yang tidak mendukung fitur ini secara native (yaitu Firefox).

YipYip
sumber
2
FWIW: Saya tidak percaya ini berfungsi di Chrome lagi. Mungkin bukan lagi bagian dari spesifikasi CSS resmi? W3Schools mengatakan "bidang pencarian berperilaku seperti bidang teks biasa" dan MDN tidak menyebutkan fungsi ini. MDN mengatakan itu akan menghapus baris baru tapi itu saja untuk jenis input ini.
KyleFarris
3
@KyleFarris Kedua metode di atas masih berfungsi untuk saya di Chrome versi 58.0.3029.110 (64-bit). Anda perlu mengetikkan sesuatu ke dalam kotak pencarian sebelum tombol hapus akan muncul.
YipYip
Bagaimana jawaban super-rated ini mengatasi masalah OP untuk menampilkan tombol "hapus" di dalam kotak teks yang membersihkan isinya?
usr-local-ΕΨΗΕΛΩΝ
2
Ini bukan solusi super sederhana jika tidak berfungsi di semua browser utama.
thelem
1
@AnandUndavia Terima kasih telah melaporkannya. Saya telah memperbarui jawaban saya untuk menentukan "Bootstrap 3", yang digunakan oleh OP ketika pertanyaan itu diposting (pada tahun 2013). Saya akan melihat agar jawaban saya berfungsi untuk Bootstrap 4 ketika saya punya waktu.
YipYip
23

Saya mencoba menghindari terlalu banyak CSS khusus dan setelah membaca beberapa contoh lain saya menggabungkan ide-ide di sana dan mendapatkan solusi ini:

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

Karena saya tidak menggunakan JavaScript bootstrap, hanya CSS bersama dengan Angular, saya tidak perlu kelas has-clear dan form-control-clear, dan saya menerapkan fungsi clear di pengontrol AngularJS saya. Dengan JavaScript bootstrap ini mungkin bisa dilakukan tanpa JavaScript sendiri.

Paul Wellner Bou
sumber
1
Anda juga dapat menambahkan tombol ng-hide ke X untuk tidak melihatnya jika input kosong.
jrvidotti
untuk tombol hapus ng-click="ctrl.searchService.searchTerm = null"danng-show="ctrl.searchService.searchTerm"
Adrian
18

Terima kasih, tidak diinginkan, solusi Anda sangat bersih. Saya menggunakan formulir bootstrap horizontal dan membuat beberapa modifikasi untuk memungkinkan penangan tunggal dan bentuk css.

html: - DIPERBARUI untuk menggunakan has-feedback dan form-control-feedback Bootstrap

 <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();
});

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

LDAdams
sumber
8
Setelah bootstrap v3.3.0 Anda perlu mengatur pointer-event dari none ke auto jika tidak, Anda tidak akan bisa mengklik form-control-feedback.
Vizjerai
Apa yang $(".clearer").hide($(this).prev('input').val());dilakukannya? Tidak bisakah begitu saja $(".clearer").hide();?
Jim Buck
Saya berasumsi niatnya adalah untuk meneruskan parameter yang benar ke hide () untuk memulai tersembunyi / ditampilkan berdasarkan apakah masukan sudah memiliki nilai. Kalau memang itu tujuannya, dia gagal (sembunyi selalu sembunyi). Harus$(".clearer").toggle(!!$(this).prev('input').val());
Jeff Shepler
15

Jawaban AngularJS / UI-Bootstrap

  • Gunakan kelas has-feedback Bootstrap untuk menampilkan ikon di dalam kolom input.
  • Pastikan ikonnya memiliki style="cursor: pointer; pointer-events: all;"
  • Gunakan ng-clickuntuk menghapus teks.

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 snippet)

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

Berikut plunkernya: http://plnkr.co/edit/av9VFw?p=preview

Derek Soike
sumber
1

Lakukan dengan gaya dan skrip sebaris:

<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>
Denis Sivzov
sumber
1

Berikut adalah solusi kerja saya dengan ikon pencarian dan hapus untuk Angularjs \ Bootstrap dengan CSS.

    <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; 
}
PavanT
sumber
1

Jangan mengikat ke id elemen, cukup gunakan elemen masukan 'sebelumnya' untuk menghapus.

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();
    });
});

Markup HTML, gunakan sebanyak yang Anda suka:

<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>
pizzamonster
sumber
-7

Tempatkan gambar (ikon batal) dengan posisi absolut, sesuaikan properti atas dan kiri, dan panggil event onclick metode yang membersihkan bidang input.

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

Dalam posisi css rentang yang sesuai,

#iconSpan {
 position : absolute;
 top:1%;
 left :14%;
}
code2use
sumber