如何在bootstrap 3中清除带有“x”的搜索框?

时间:2013-11-19 02:51:43

标签: twitter-bootstrap twitter-bootstrap-3

使用bootstrap时有些麻烦,所以一些帮助会很棒。感谢

我想要的是什么:(上半部分)

enter image description here

我目前的代码:

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

当前屏幕截图:

enter image description here

9 个答案:

答案 0 :(得分:199)

得到这样的东西

input with clear button

使用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,例如隐藏&#39; x&#39;如果输入为空,则发出Ajax请求等。见http://www.bootply.com/121508

答案 1 :(得分:53)

超简单的HTML 5解决方案:

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

来源:HTML 5 Tutorial - Input Type: Search

至少适用于Chrome 8,Edge 14,IE 10和Safari 5,不需要Bootstrap或任何其他库。 (不幸的是,似乎Firefox还不支持搜索清除按钮。)

在搜索框中输入后,会出现一个“x”,可以单击该按钮清除文本。在其他浏览器(如Firefox)中,这仍然可以作为普通的编辑框(没有“x”按钮),因此Firefox用户可以选择文本并按删除,或者......

如果您真的需要Firefox中支持的这个很棒的功能,那么您可以实现此处发布的其他解决方案之一作为输入[type = search]元素的polyfill。 polyfill是在用户的浏览器不支持该功能时自动添加标准浏览器功能的代码。随着时间的推移,希望您可以在浏览器实现相应功能时删除polyfill。无论如何,polyfill实现可以帮助保持HTML代码更清晰。

顺便说一句,其他HTML 5输入类型(例如“日期”,“数字”,“电子邮件”等)也会优雅地降级为普通编辑框。有些浏览器可能会给你一个奇特的日期选择器,一个带有向上/向下按钮的微调器控件,或者(在手机上)一个包含'@'符号和'.com'按钮的特殊键盘,但据我所知,所有浏览器将至少显示任何无法识别的输入类型的纯文本框。

Bootstrap&amp; HTML 5解决方案

Bootstrap重置了很多CSS并打破了HTML 5搜索取消按钮。加载Bootstrap 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 Search Input Does Not Work with Bootstrap

我已经测试过此解决方案适用于最新版本的Chrome,Edge和Internet Explorer。我无法在Safari中测试。不幸的是,用于清除搜索的“x”按钮不会出现在Firefox中,但如上所述,可以为本机不支持此功能的浏览器(即Firefox)实现填充。

答案 2 :(得分: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>

由于我不使用bootstrap的JavaScript,只有CSS和Angular一起使用,我不需要类清晰且表单控制清晰,我实现了清除功能在我的AngularJS控制器中。使用bootstrap的JavaScript,没有自己的JavaScript就可以实现。

答案 3 :(得分:17)

感谢无线您的解决方案非常干净。我正在使用水平引导程序表单并做了一些修改以允许单个处理程序并形成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

答案 4 :(得分:14)

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>

这是羽毛球:http://plnkr.co/edit/av9VFw?p=preview

答案 5 :(得分: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>

答案 6 :(得分:1)

这是我的工作解决方案,带有用于Angularjs \ Bootstrap和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; 
}

答案 7 :(得分:1)

不要绑定到元素ID,只需使用&#39; previous&#39;要清除的输入元素。

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>

答案 8 :(得分:-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%;
}