如何像 iPhone 一样在 HTML 文本输入框中放置一个清除按钮?

IT技术 javascript iphone html css
2021-02-23 11:25:31

我想要一个漂亮的小图标,当点击它时将清除 <INPUT> 框中的文本。

这是为了节省空间,而不是在输入框外有一个清晰的链接。

我的 CSS 技能很弱……这是iPhone 外观截图照片。

6个回答

现在有了 HTML5,这很简单:

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

默认情况下,大多数现代浏览器会自动在字段中呈现可用的清除按钮。

纯 HTML5 搜索输入字段

(如果您使用 Bootstrap,则必须向 css 文件添加覆盖以使其显示)

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

引导搜索输入字段

Safari/WebKit 浏览器在使用type="search"results=5时也可以提供额外的功能autosave="...",但它们也会覆盖您的许多样式(例如高度、边框)。为了防止这些覆盖,同时仍然保留 X 按钮等功能,您可以将其添加到您的 css 中:

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

有关.css 提供的功能的更多信息,请参阅css-tricks.comtype="search"

顺风呢?我的没有出现,而且顺风文档是空的
2021-04-24 11:25:31
优秀的答案,不涉及代码。不幸的是,许多浏览器不支持..没关系,我的产品中将是 Chrome 的附加功能:)
2021-05-01 11:25:31
2021-05-15 11:25:31

从 HTML5 开始,您可以使用<input type="search">. 但这不一定是可定制的。如果您想完全控制 UI,这里有两个启动示例。一个带有 jQ​​uery,另一个没有。

使用 jQuery:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 2803532</title>
        <script src="https://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $('input.deletable').wrap('<span class="deleteicon"></span>').after($('<span>x</span>').click(function() {
                    $(this).prev('input').val('').trigger('change').focus();
                }));
            });
        </script>
        <style>
            span.deleteicon {
                position: relative;
                display: inline-flex;
                align-items: center;
            }
            span.deleteicon span {
                position: absolute;
                display: block;
                right: 3px;
                width: 15px;
                height: 15px;
                border-radius: 50%;
                color: #fff;
                background-color: #ccc;
                font: 13px monospace;
                text-align: center;
                line-height: 1em;
                cursor: pointer;
            }
            span.deleteicon input {
                padding-right: 18px;
                box-sizing: border-box;
            }
        </style>
    </head>
    <body>
        <input type="text" class="deletable">
    </body>
</html>

没有 jQuery

jQuery并不是绝对必要的,它只是很好地将渐进增强所需的逻辑与源代码分开,您当然也可以继续使用HTML/CSS/JS:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 2803532, with "plain" HTML/CSS/JS</title>
        <style>
            span.deleteicon {
                position: relative;
                display: inline-flex;
                align-items: center;
            }
            span.deleteicon span {
                position: absolute;
                display: block;
                right: 3px;
                width: 15px;
                height: 15px;
                border-radius: 50%;
                color: #fff;
                background-color: #ccc;
                font: 13px monospace;
                text-align: center;
                line-height: 1em;
                cursor: pointer;
            }
            span.deleteicon input {
                padding-right: 18px;
                box-sizing: border-box;
            }
        </style>
    </head>
    <body>
        <span class="deleteicon">
            <input type="text">
            <span onclick="var input = this.previousElementSibling; input.value = ''; input.focus();">x</span>
        </span>
    </body>
</html>

你最终只会得到更丑陋的 HTML(和非跨浏览器兼容的 JS ;))。

同样,如果 UI 的外观不是您最关心的问题,但功能是您最关心的,那么只需使用<input type="search">而不是<input type="text">. 它将在支持 HTML5 的浏览器上显示(特定于浏览器的)清除按钮。

在 IE9 中,文本浮动在十字图标下。
2021-04-22 11:25:31
您还可以class="fa fa-remove"在内部跨度上使用字体很棒的图标来显示一个漂亮的十字图标
2021-05-04 11:25:31
可以在文本字段为空时隐藏清除按钮吗?
2021-05-09 11:25:31

HTML5 引入了“搜索”输入类型,我相信它可以满足您的需求。

<input type="search" />

这是一个活生生的例子

清除按钮也未显示在最新的 Chrome 中
2021-04-23 11:25:31
如果您使用的是 Bootstrap,它可能会覆盖默认行为
2021-05-07 11:25:31
链接的 CodePen 在输入中缺少结束斜线,所以如果您想看到它在 CodePen 上工作,只需添加结束斜线。
2021-05-12 11:25:31
@Gen1-1 oop,看来公共上传被禁用了blog.codepen.io/2019/08/06/anonymous-pen-save-option-removed 如果有人有固定的代码笔,请随时编辑并帮助纠正演示
2021-05-18 11:25:31
尽管所有最近的浏览器都支持“搜索”类型(在此处查看支持情况:wufoo.com/html5),但在 Firefox (32.0.3) 或 Opera (12.17) 中未显示清除按钮。
2021-05-19 11:25:31

查看我们的jQuery-ClearSearch插件。这是一个可配置的 jQuery 插件 - 通过设置输入字段的样式来适应您的需求非常简单。只需按如下方式使用它:

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

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

例子

这很棒,但我建议添加“$(window).resize(function() {triggerBtn()});” 在 jquery.clearsearch.js 中,就在 $this.on('keyup keydown change focus', triggerBtn) 之后;| 这样调整窗口大小就不会弄乱交叉位置
2021-05-04 11:25:31

不幸的是,您实际上不能将它放在文本框中,只能让它看起来像它在里面,不幸的是,这意味着需要一些 css :P

理论是将输入包装在一个 div 中,从输入中去除所有边框和背景,然后将 div 设置为看起来像盒子。然后,在代码和工作的输入框之后放入您的按钮。

无论如何,一旦你让它工作;)