如何在我的HTML文本输入框中放置一个清晰的按钮,就像iPhone一样?

时间:2010-05-10 14:43:54

标签: javascript iphone html css

我希望有一个漂亮的小图标,点击后会清除< INPUT>中的文字。框。

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

我的CSS技能很弱......这是一张关于iPhone外观的 screenshot 照片。

10 个答案:

答案 0 :(得分:116)

现在使用HTML5,它非常简单:

    React.DOM.form
        onSubmit: @handleSubmit
        # -> 
            React.DOM.div # Problem is here
                className: 'form-group'

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

plain HTML5 search input field

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

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

bootstrap search input field

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

autosave="..."

有关input[type=search] { -webkit-appearance: none; } 提供的功能,请参阅css-tricks.com for more info

答案 1 :(得分:89)

@thebluefox总结了最重要的一点。您还被迫使用JavaScript来使该按钮无论如何都能正常工作。这是一个SSCCE,你可以复制'n'paste'n'run它:

<!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>

Live example here

jQuery顺便说一下,它只是很好地将渐进增强所需的逻辑与源分开,你当然也可以继续使用 plain 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>

你最终只会使用更丑陋的HTML(和非交叉浏览器兼容的JS;)。)

请注意,当UI看起来不是你最关心的问题,但功能是,那么只需使用<input type="search">而不是<input type="text">。它将在支持HTML5的浏览器上显示(特定于浏览器的)清除按钮。

答案 2 :(得分:37)

HTML5引入了搜索&#39;输入类型,我相信做你想要的。

<input type="search" />

这里是live example

答案 3 :(得分:24)

查看我们的jQuery-ClearSearch插件。它是一个可配置的jQuery插件 - 通过设计输入字段使其适应您的需求是直截了当的。只需使用如下:

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

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

示例:http://jsfiddle.net/wldaunfr/FERw3/

答案 4 :(得分:16)

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

理论是将输入包装在div中,从输入中取出所有边框和背景,然后将div设置为看起来像框。然后,在代码中的输入框和作业之后放下按钮,好了。

无论如何你必须工作;)

答案 5 :(得分:1)

当然,最好的方法是使用越来越受支持的<input type="search" />

无论如何,为了获得一些编码乐趣,我认为它也可以使用表单的重置按钮来实现,这是工作结果(值得注意的是,不能使用其他输入,但使用此方法的搜索字段,或重置按钮也会删除它们,不需要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>

答案 6 :(得分:1)

这个简单的解决方案可能会有所帮助:

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

答案 7 :(得分:0)

@Mahmoud Ali Kaseem

我刚刚更改了一些CSS以使其看起来不同并添加了focus();

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>

答案 8 :(得分:0)

在HTML5中是如此简单

<input type="search">

这会做好您的工作!

答案 9 :(得分:0)

Firefox 似乎不支持清除搜索字段功能...我发现这个纯 CSS 解决方案效果很好:Textbox with a clear button completely in CSS | Codepen | 2013。奇迹发生在

.search-box:not(:valid) ~ .close-icon {
    display: none;
}

body {
    background-color: #f1f1f1;
    font-family: Helvetica,Arial,Verdana;

}
h2 {
    color: green;
    text-align: center;
}
.redfamily {
    color: red; 
}
.search-box,.close-icon,.search-wrapper {
    position: relative;
    padding: 10px;
}
.search-wrapper {
    width: 500px;
    margin: auto;
}
.search-box {
    width: 80%;
    border: 1px solid #ccc;
  outline: 0;
  border-radius: 15px;
}
.search-box:focus {
    box-shadow: 0 0 15px 5px #b0e0ee;
    border: 2px solid #bebede;
}
.close-icon {
    border:1px solid transparent;
    background-color: transparent;
    display: inline-block;
    vertical-align: middle;
  outline: 0;
  cursor: pointer;
}
.close-icon:after {
    content: "X";
    display: block;
    width: 15px;
    height: 15px;
    position: absolute;
    background-color: #FA9595;
    z-index:1;
    right: 35px;
    top: 0;
    bottom: 0;
    margin: auto;
    padding: 2px;
    border-radius: 50%;
    text-align: center;
    color: white;
    font-weight: normal;
    font-size: 12px;
    box-shadow: 0 0 2px #E50F0F;
    cursor: pointer;
}
.search-box:not(:valid) ~ .close-icon {
    display: none;
}
<h2>
    Textbox with a clear button completely in CSS <br> <span class="redfamily">< 0 lines of JavaScript ></span>
</h2>
<div class="search-wrapper">
    <form>
    <input type="text" name="focus" required class="search-box" placeholder="Enter search term" />
        <button class="close-icon" type="reset"></button>
    </form>
</div>

我需要更多功能并在我的代码中添加了这个 jQuery:

$('.close-icon').click(function(){ /* my code */ });