如何在引导程序3中清除带有“ x”的搜索框?


93

引导程序遇到了一些麻烦,因此有些帮助将是很棒的。谢谢

我想要什么:(顶部)

在此处输入图片说明

我当前的代码:

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

当前屏幕截图:

在此处输入图片说明

Answers:


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

当然,您必须为所需的任何功能编写更多的Javascript,例如,如果输入为空,则隐藏“ x”,发出Ajax请求,等等。看到http://www.bootply.com/121508


4
如果有人更喜欢Plunker而不是Bootply,则为:plnkr.co/edit/c2710u?p=preview
tanguy_k 2014年

2
从可访问性的角度来看,#searchclear跨度最好是一个按钮。这是一个交互式元素,因此将其标记为交互式元素。就目前而言,依靠键盘导航的用户无法切换到searchclear范围,并且辅助技术(例如屏幕阅读器)也不会轻易识别出它
Ian Dickinson

3
我只是试图修复这种情况下,你正在使用该输入在线与其他元素(如插件,下拉菜单等),只需卸下类包装的div,将它设置为position: relative,然后调整#searchclear与z-index: 10; top: 10px和删除bottom: 0
RecuencoJones

具有顶部,底部和高度不是矛盾的吗?
nafg

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]元素的polyfill。polyfill是一种代码,当用户的浏览器不支持该功能时,该代码会自动添加标准浏览器功能。随着时间的流逝,希望随着浏览器实现相应功能,您能够删除polyfill。在任何情况下,polyfill实现都可以帮助保持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搜索输入不适用于Bootstrap

我已经测试过该解决方案可以在最新版本的Chrome,Edge和Internet Explorer中使用。我无法在Safari中进行测试。不幸的是,用于清除搜索的“ x”按钮没有出现在Firefox中,但是如上所述,可以为不原生支持该功能的浏览器(即Firefox)实现一个polyfill。


2
FWIW:我认为这不再适用于Chrome。也许不再是官方CSS规范的一部分了?W3Schools表示“搜索字段的行为类似于常规文本字段”,而MDN没有提及此功能。MDN确实会删除新行,但对于此输入类型而言,仅此而已。
KyleFarris '17

3
@KyleFarris在Chrome 58.0.3029.110(64位)中,上述两种方法仍对我有效。您需要在搜索框中输入一些内容,然后出现清除按钮。
YipYip

这个超级评分的答案如何解决OP问题,以在清除其内容的文本框中显示一个“清除”按钮?
USR-本地ΕΨΗΕΛΩΝ

2
如果它不能在所有主流浏览器中都起作用,那么它不是一个超级简单的解决方案。
塞勒姆

1
@AnandUndavia感谢您的举报。我已经更新了答案,以指定“ Bootstrap 3”,这是问题发布时OP所使用的(早在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's

清除按钮ng-click="ctrl.searchService.searchTerm = null"ng-show="ctrl.searchService.searchTerm"
阿德里安

18

感谢您的连线,您的解决方案非常干净。我正在使用水平引导程序表单,并进行了一些修改,以允许使用单个处理程序和表单CSS。

html: - 更新为使用Bootstrap的has-feedback和form-control-feedback

 <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
在bootstrap v3.3.0之后,您将需要将指针事件从无设置为自动,否则将无法单击form-control-feedback。
Vizjerai

怎么$(".clearer").hide($(this).prev('input').val());办?不能只是$(".clearer").hide();吗?
Jim Buck

我假设他的意图是将真实参数传递给hide()以根据输入是否已经有值开始隐藏/显示。如果那是目的,那么他就失败了(隐藏总是藏起来)。应该是$(".clearer").toggle(!!$(this).prev('input').val());
Jeff Shepler 2015年

15

AngularJS / UI-Bootstrap答案

  • 使用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>

这是pl客: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%;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.