Làm cách nào để đặt một nút rõ ràng bên trong hộp nhập văn bản HTML của tôi giống như iPhone?


131

Tôi muốn có một biểu tượng nhỏ mà khi nhấp vào sẽ xóa văn bản trong hộp <INPUT>.

Điều này là để tiết kiệm không gian hơn là có một liên kết rõ ràng bên ngoài hộp đầu vào.

Kỹ năng CSS của tôi rất yếu ... Đây là ảnh chụp màn hình iPhone trông như thế nào.

Câu trả lời:


93

@thebluefox đã tóm tắt hầu hết tất cả. Bạn cũng chỉ buộc phải sử dụng JavaScript để làm cho nút đó hoạt động. Đây là một SSCCE, bạn có thể sao chép '

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 2803532</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $('input.deletable').wrap('<span class="deleteicon" />').after($('<span/>').click(function() {
                    $(this).prev('input').val('').trigger('change').focus();
                }));
            });
        </script>
        <style>
            span.deleteicon {
                position: relative;
            }
            span.deleteicon span {
                position: absolute;
                display: block;
                top: 5px;
                right: 0px;
                width: 16px;
                height: 16px;
                background: url('http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=4') 0 -690px;
                cursor: pointer;
            }
            span.deleteicon input {
                padding-right: 16px;
                box-sizing: border-box;
            }
        </style>
    </head>
    <body>
        <input type="text" class="deletable">
    </body>
</html>

Sống ví dụ ở đây .

jQuery là bằng cách này không cần thiết, nó chỉ độc đáo tách logic cần thiết để tăng cường tiến bộ từ nguồn, bạn có thể dĩ nhiên cũng đi trước với đồng bằng HTML / CSS / JS:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 2803532, with "plain" HTML/CSS/JS</title>
        <style>
            span.deleteicon {
                position: relative;
            }
            span.deleteicon span {
                position: absolute;
                display: block;
                top: 5px;
                right: 0px;
                width: 16px;
                height: 16px;
                background: url('http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=4') 0 -690px;
                cursor: pointer;
            }
            span.deleteicon input {
                padding-right: 16px;
                box-sizing: border-box;
            }
        </style>
    </head>
    <body>
        <span class="deleteicon">
            <input type="text">
            <span onclick="var input = this.previousSibling; input.value = ''; input.focus();"></span>
        </span>
    </body>
</html>

Bạn chỉ kết thúc với HTML xấu hơn (và JS không tương thích chéo;)).

Lưu ý rằng khi giao diện người dùng trông không phải là mối quan tâm lớn nhất của bạn, nhưng chức năng là, sau đó chỉ sử dụng <input type="search">thay vì <input type="text">. Nó sẽ hiển thị nút xóa (dành riêng cho trình duyệt) trên các trình duyệt có khả năng HTML5.


7
có thể làm cho nút xóa bị ẩn khi trường văn bản trống?
root

Trong IE9, văn bản nổi dưới biểu tượng chéo.
sedovav

kể từ khi thay đổi chủ đề, url cho hình ảnh không còn chính xác nữa. hình ảnh cũ có thể được truy cập tại web.archive.org/web/20150101025546/http://cdn.sstatic.net/...
zacaj

1
Bạn cũng có thể sử dụng các biểu tượng tuyệt vời với phông chữ class="fa fa-remove"bên trong để hiển thị một biểu tượng chéo đẹp
singe3

Tôi đã sử dụng phiên bản Javascript thuần túy và nó hoạt động tốt, ngoại trừ việc định tâm nút trên Win / Linux Firefox / Chrome. Tôi đã giải quyết điều đó bằng cách loại bỏ top:trong khoảng con và thiết lập display: flex; align-items: center;trong khoảng cha mẹ.
thomasa88

157

Ngày nay với HTML5, nó khá đơn giản:

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

Hầu hết các trình duyệt hiện đại sẽ tự động hiển thị một nút xóa có thể sử dụng trong trường theo mặc định.

trường nhập liệu tìm kiếm HTML5 đơn giản

(Nếu bạn sử dụng Bootstrap, bạn sẽ phải thêm ghi đè vào tệp css của mình để hiển thị)

input[type=search]::-webkit-search-cancel-button {
    -webkit-appearance: searchfield-cancel-button;
}

trường nhập liệu tìm kiếm bootstrap

Các trình duyệt Safari / WebKit cũng có thể cung cấp các tính năng bổ sung khi sử dụng type="search", như results=5autosave="...", nhưng chúng cũng ghi đè lên nhiều kiểu của bạn (ví dụ: chiều cao, đường viền). Để ngăn những ghi đè đó, trong khi vẫn giữ chức năng như nút X, bạn có thể thêm phần này vào css của mình:

input[type=search] {
    -webkit-appearance: none;
}

Xem css-tricks.com để biết thêm thông tin về các tính năng được cung cấp bởi type="search".


3
Câu trả lời tuyệt vời, không có mã liên quan. Thật không may, không được nhiều trình duyệt hỗ trợ .. Nevermind, sẽ là một tính năng bổ sung của Chrome trong sản phẩm của tôi :)
guillaumepotier

48

HTML5 giới thiệu loại đầu vào 'tìm kiếm' mà tôi tin là làm những gì bạn muốn.

<input type="search" />

Đây là một ví dụ sống .


4
Mặc dù loại 'tìm kiếm' được hỗ trợ bởi tất cả các trình duyệt gần đây (kiểm tra hỗ trợ tại đây: wufoo.com/html5), nút xóa không được hiển thị trong Firefox (32.0.3) hoặc Opera (12,17).
justanotherprogrammer

9
nút xóa cũng không được hiển thị trong Chrome mới nhất
tsayen

3
Nếu bạn đang sử dụng Bootstrap, nó có thể ghi đè hành vi mặc định
aexl

CodePen được liên kết bị thiếu dấu gạch chéo trong đầu vào, vì vậy nếu bạn muốn thấy nó hoạt động trên CodePen, chỉ cần thêm dấu gạch chéo đóng.
Gen1-1

@ Gen1-1 oops, có vẻ như tải lên công khai bị vô hiệu hóa blog.codepen.io/2019/08/06/anonymous-pen-save-option-remond nếu bất cứ ai có bút mã cố định, vui lòng chỉnh sửa và giúp sửa bản demo
ThorSummoner

24

Kiểm tra plugin jQuery-ClearSearch của chúng tôi . Đây là một plugin jQuery có thể định cấu hình - việc điều chỉnh nó theo nhu cầu của bạn bằng cách định kiểu trường đầu vào rất đơn giản. Chỉ cần sử dụng nó như sau:

<input class="clearable" type="text" placeholder="search">

<script type="text/javascript">
    $('.clearable').clearSearch();
</script>

Ví dụ: http://jsfiddle.net/wldaunfr/FERw3/


Điều này thật tuyệt vời, nhưng tôi sẽ khuyên bạn nên thêm vào "$ (window) .resize (function () {triggerBtn ()});" trong jquery.clearsearch.js, chỉ sau $ this.on ('keyup thay đổi phím tập trung', triggerBtn); | Vì vậy, việc thay đổi kích thước cửa sổ sẽ không làm rối tung vị trí chéo
Ng Sek Long

17

Thật không may, bạn không thể đặt nó bên trong hộp văn bản, chỉ làm cho nó trông giống như bên trong nó, điều đó không may có nghĩa là cần một số css: P

Lý thuyết được bọc đầu vào trong một div, lấy tất cả các đường viền và nền ra khỏi đầu vào, sau đó tạo kiểu cho div trông giống như hộp. Sau đó, thả nút của bạn sau hộp nhập mã và công việc tốt.

Khi bạn đã có nó để làm việc nào;)


6

Tôi có một giải pháp sáng tạo Tôi nghĩ bạn đang tìm kiếm

$('#clear').click(function() {
  $('#input-outer input').val('');
});
body {
  font-family: "Tahoma";
}
#input-outer {
  height: 2em;
  width: 15em;
  border: 1px #e7e7e7 solid;
  border-radius: 20px;
}
#input-outer input {
  height: 2em;
  width: 80%;
  border: 0px;
  outline: none;
  margin: 0 0 0 10px;
  border-radius: 20px;
  color: #666;
}
#clear {
  position: relative;
  float: right;
  height: 20px;
  width: 20px;
  top: 5px;
  right: 5px;
  border-radius: 20px;
  background: #f1f1f1;
  color: white;
  font-weight: bold;
  text-align: center;
  cursor: pointer;
}
#clear:hover {
  background: #ccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="input-outer">
  <input type="text">
  <div id="clear">
    X
  </div>
</div>

https://jsfiddle.net/qdesign/xn9eogmx/1/


3

Tất nhiên cách tiếp cận tốt nhất là sử dụng sự hỗ trợ ngày càng nhiều <input type="search" />.

Dù sao để có một chút thú vị về mã hóa, tôi nghĩ rằng nó cũng có thể đạt được bằng cách sử dụng nút đặt lại của biểu mẫu và đây là kết quả hoạt động (đáng chú ý là không thể sống các đầu vào khác nhưng trường tìm kiếm với phương pháp này hoặc nút đặt lại sẽ xóa chúng cũng vậy), không cần javascript:

form > div{
    position: relative;
    width: 200px;
}

form [type="text"] {
    width: 100%;
    padding-right: 20px;
}

form [type="reset"] {
    position: absolute;
    border: none;
    display: block;
    width: 16px;
    border-radius: 20px;
    top: 2px;
    bottom: 2px;
    right: -20px;
    background-color: #ddd;
    padding: 0px;
    margin: 0px;
}
<form>
	<div>
		<input type="text" />
		<input type="reset" value="X" />
	</div>
</form>


1

Có lẽ giải pháp đơn giản này có thể giúp:

<input type="text" id="myInput" value="No War"/><button onclick="document.getElementById('myInput').value = ''" title="Clear">X</button></input>


Mặc dù mã này có thể cung cấp giải pháp cho vấn đề của OP, nhưng chúng tôi khuyên bạn nên cung cấp ngữ cảnh bổ sung về lý do và / hoặc cách mã này trả lời câu hỏi. Mã chỉ trả lời thường trở nên vô dụng trong thời gian dài bởi vì những người xem trong tương lai gặp vấn đề tương tự không thể hiểu được lý do đằng sau giải pháp.
E. Zeytinci

-1

@Mahmoud Ali Kaseem

Tôi vừa thay đổi một số CSS để làm cho nó trông khác biệt và thêm tiêu điểm ();

https://jsfiddle.net/xn9eogmx/81/

$('#clear').click(function() {
  $('#input-outer input').val('');
  $('#input-outer input').focus();
});
body {
  font-family: "Arial";
  font-size: 14px;
}
#input-outer {
  height: 2em;
  width: 15em;
  border: 1px #777 solid;
  position: relative;
  padding: 0px;
  border-radius: 4px;
}
#input-outer input {
  height: 100%;
  width: 100%;
  border: 0px;
  outline: none;
  margin: 0 0 0 0px;
  color: #666;
  box-sizing: border-box;
  padding: 5px;
  padding-right: 35px;
  border-radius: 4px;
}
#clear {
  position: absolute;
  float: right;
  height: 2em;
  width: 2em;
  top: 0px;
  right: 0px;
  background: #aaa;
  color: white;
  text-align: center;
  cursor: pointer;
  border-radius: 0px 4px 4px 0px;
}
#clear:after {
  content: "\274c";
  position: absolute;
  top: 4px;
  right: 7px;
}
#clear:hover,
#clear:focus {
  background: #888;
}
#clear:active {
  background: #666;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="input-outer">
  <input type="text">
  <div id="clear"></div>
</div>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.