Answers:
为了得到这样的东西
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
#searchclear
跨度最好是一个按钮。这是一个交互式元素,因此将其标记为交互式元素。就目前而言,依靠键盘导航的用户无法切换到searchclear范围,并且辅助技术(例如屏幕阅读器)也不会轻易识别出它
position: relative
,然后调整#searchclear与z-index: 10; top: 10px
和删除bottom: 0
超简单的HTML 5解决方案:
<input type="search" placeholder="Search..." />
至少可在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>
我已经测试过该解决方案可以在最新版本的Chrome,Edge和Internet Explorer中使用。我无法在Safari中进行测试。不幸的是,用于清除搜索的“ x”按钮没有出现在Firefox中,但是如上所述,可以为不原生支持该功能的浏览器(即Firefox)实现一个polyfill。
我尝试避免使用过多的自定义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,这可能成为可能。
ng-click="ctrl.searchService.searchTerm = null"
和ng-show="ctrl.searchService.searchTerm"
感谢您的连线,您的解决方案非常干净。我正在使用水平引导程序表单,并进行了一些修改,以允许使用单个处理程序和表单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();
});
$(".clearer").hide($(this).prev('input').val());
办?不能只是$(".clearer").hide();
吗?
$(".clearer").toggle(!!$(this).prev('input').val());
AngularJS / UI-Bootstrap答案
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
使用内联样式和脚本来执行此操作:
<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>
这是我的工作解决方案,带有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;
}
不要绑定到元素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>