Thêm một type="search"
vào đầu vào của bạn
Hỗ trợ khá tốt nhưng sẽ không hoạt động trong IE <10
Đầu vào có thể chấp nhận được cho các trình duyệt cũ
Nếu bạn cần hỗ trợ IE9, đây là một số cách giải quyết
Sử dụng một tiêu chuẩn <input type="text">
và một số yếu tố HTML:
/**
* Clearable text inputs
*/
$(".clearable").each(function() {
var $inp = $(this).find("input:text"),
$cle = $(this).find(".clearable__clear");
$inp.on("input", function(){
$cle.toggle(!!this.value);
});
$cle.on("touchstart click", function(e) {
e.preventDefault();
$inp.val("").trigger("input");
});
});
/* Clearable text inputs */
.clearable{
position: relative;
display: inline-block;
}
.clearable input[type=text]{
padding-right: 24px;
width: 100%;
box-sizing: border-box;
}
.clearable__clear{
display: none;
position: absolute;
right:0; top:0;
padding: 0 8px;
font-style: normal;
font-size: 1.2em;
user-select: none;
cursor: pointer;
}
.clearable input::-ms-clear { /* Remove IE default X */
display: none;
}
<span class="clearable">
<input type="text" name="" value="" placeholder="">
<i class="clearable__clear">×</i>
</span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Chỉ sử dụng một <input class="clearable" type="text">
(Không có yếu tố bổ sung)
thiết lập class="clearable"
và chơi với hình nền của nó:
/**
* Clearable text inputs
*/
function tog(v){return v?'addClass':'removeClass';}
$(document).on('input', '.clearable', function(){
$(this)[tog(this.value)]('x');
}).on('mousemove', '.x', function( e ){
$(this)[tog(this.offsetWidth-18 < e.clientX-this.getBoundingClientRect().left)]('onX');
}).on('touchstart click', '.onX', function( ev ){
ev.preventDefault();
$(this).removeClass('x onX').val('').change();
});
// $('.clearable').trigger("input");
// Uncomment the line above if you pre-fill values from LS or server
/* Clearable text inputs */
.clearable{
background: #fff url(http://i.stack.imgur.com/mJotv.gif) no-repeat right -10px center;
border: 1px solid #999;
padding: 3px 18px 3px 4px; /* Use the same right padding (18) in jQ! */
border-radius: 3px;
transition: background 0.4s;
}
.clearable.x { background-position: right 5px center; } /* (jQ) Show icon */
.clearable.onX{ cursor: pointer; } /* (jQ) hover cursor style */
.clearable::-ms-clear {display: none; width:0; height:0;} /* Remove IE default X */
<input class="clearable" type="text" name="" value="" placeholder="" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
bản demo jsBin
Mẹo nhỏ là đặt một số phần đệm bên phải (tôi đã sử dụng 18px) sang input
và đẩy hình nền bên phải, khuất tầm nhìn (tôi đã sử dụng right -10px center
).
Phần đệm 18px đó sẽ ngăn văn bản ẩn bên dưới biểu tượng (trong khi hiển thị).
jQ sẽ thêm lớp x
(nếu input
có giá trị) hiển thị biểu tượng rõ ràng.
Bây giờ tất cả những gì chúng ta cần là nhắm mục tiêu với jQ các đầu vào với lớp x
và phát hiện mousemove
xem chuột có ở trong khu vực "x" 18px đó không; nếu bên trong, thêm lớp onX
.
Nhấp vào onX
lớp sẽ xóa tất cả các lớp, đặt lại giá trị đầu vào và ẩn biểu tượng.
7x7px gif:
Chuỗi Base64:
data:image/gif;base64,R0lGODlhBwAHAIAAAP///5KSkiH5BAAAAAAALAAAAAAHAAcAAAIMTICmsGrIXnLxuDMLADs=