입력 텍스트 내에서 명확한 아이콘


185

Google 검색 창과 같은 입력 요소 자체를 지우려면 오른쪽에 아이콘이있는 입력 텍스트 요소를 만드는 빠른 방법이 있습니까?

주변을 둘러 보았지만 입력 요소의 배경으로 아이콘을 넣는 방법 만 찾았습니다. jQuery 플러그인이나 다른 것이 있습니까?

입력 텍스트 요소 안에 아이콘을 원합니다.

--------------------------------------------------
|                                               X|
--------------------------------------------------

3
입력 상자 위에 이미지를 배치하는 jQuery 플러그인? 나는 무엇인가 또는 무엇을 놓치고 있습니까?!
Christian

1
@Christian Sciberras 내가 선택한 답변에서 볼 수 있듯이 jquery 플러그인이 될 수 있습니다 ...
Giovanni Di Milia

1
일반 경고 상자를 표시하는 jQuery 플러그인이있을 수 있습니다. 그것은 반드시 당신이 정말로 해야 한다는 것을 의미하지 않으며 , 대부분의 경우 과도하게 설계된 팽창 입니다. 아 그리고 그건 그렇고, 선택한 것은 jQuery 플러그인 이 아니라 javascript, html 및 css의 혼합입니다. 플러그인은 관련 세부 사항을 포함하는 jQuery 서명이있는 단일 파일 / 스크립트입니다.
Christian

1
@Christian Sciberras : jQuery 플러그인과 자바 스크립트 및 CSS를 구분할 수 있습니다. 내가 말한 것은 좋은 일을하고 싶다면 입력 상자에 이미지 만 넣을 수 없다는 것입니다.
Giovanni Di Milia 2016 년

이 문제를 찾는 사람들은이 정보도 필요합니다 .“검색”HTML5 입력이 지워지는 것을 어떻게 감지합니까?
brasofilo

답변:


342

type="search"입력 값에 a 를 추가 하십시오
. 지원은 꽤 괜찮지 만 IE <10에서는 작동하지 않습니다.

<input type="search">

기존 브라우저를위한 명확한 입력

IE9 지원 이 필요한 경우 몇 가지 해결 방법이 있습니다.

표준 <input type="text">및 일부 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">&times;</i>
</span>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input class="clearable" type="text">(추가 요소 없음) 만 사용

입력 요소 내부의 명확한 아이콘

a를 설정하고 class="clearable"배경 이미지로 재생하십시오.

/**
 * 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>

jsBin 데모

트릭은 올바른 패딩 (18px을 사용)을 설정 input하고 배경 이미지를 눈에 띄지 않게 밀어 넣는 것입니다 (I used right -10px center).
18px 패딩은 아이콘 아래에 텍스트가 보이지 않도록합니다 (표시되는 동안).
jQ는 명확한 아이콘을 보여주는 클래스 x( input값이있는 경우)를 추가 합니다.
이제 우리가 필요로하는 것은 클래스로 입력을 jQ로 대상 지정 하고 마우스가 18px "x"영역 안에 있는지를 x감지하는 것 mousemove입니다. 내부에 클래스를 추가하십시오 onX. 클래스를
클릭하면 onX모든 클래스가 제거되고 입력 값이 재설정되고 아이콘이 숨겨집니다.


7x7px gif : 명확한 아이콘 7x7

Base64 문자열 :

data:image/gif;base64,R0lGODlhBwAHAIAAAP///5KSkiH5BAAAAAAALAAAAAAHAAcAAAIMTICmsGrIXnLxuDMLADs=

5
이 코드의 아이디어 중 일부를 빌려서 태그 클라우드 생성기 (순수한 CSS 태그와 공감 및 하향 투표 버튼 사용)를 만들었습니다. 브라우저에서 잘 보이기를 바랍니다. jsfiddle.net/7PnKS
mrBorna

1
와, 정말 좋은 해결책입니다. 그것이 내가 찾고있는 것입니다. 감사합니다. 그러나 "x"이미지를 어떻게 Bootstrap 3 글리프 콘을 사용하도록 변경할 수 있습니까? 따라서 글리프 콘은 글꼴이므로 축소 할 때 더 잘 표시됩니다.
user1995781

1
훌륭하지만 배경 이미지는 다른 CSS와 충돌 할 수 있습니다. wldaunfr 아래의 대답은 깔끔한 jQuery를에 플러그인 의미 : plugins.jquery.com/clearsearch을
닉 웨스트 게이트에게

1
최신 파이어 폭스와 크롬에서 나에게 잘 작동합니다. iOS에서 작동 하도록 변경 .on('touchstart click', '.onX', ...해야 .on('touchstart click', '.onX, .x', ...했습니다.
kritzikratzi

1
@ RokoC.Buljan 방금 다시 테스트 한 결과는 다음과 같습니다. 1) 입력 텍스트 상자에 몇 개의 문자를 입력합니다. 2) 'X'아이콘이 나타납니다. 3) 'X'아이콘을 클릭했지만 텍스트 텍스트가 지워지지 않습니다. 참고 :이 시점에서 iPhone 키보드는 여전히 활성 상태이며 숨겨져 있지 않습니다. 4) "완료"버튼을 클릭하여 키보드를 숨기고 'X'아이콘을 다시 클릭하면 텍스트가 올바르게 지워집니다. iPhone 키보드가 표시되면 'X'로 텍스트를 지울 수없는 것 같습니다.
Withhelds

61

이것이 html 5 호환 브라우저로 제한되어 있으면 다음을 사용하여 제안 할 수 있습니다.

<input type="search" />

JS 피들 데모

분명히 Chromium (Ubuntu 11.04)에서는 일반 텍스트 이미지 / 기능이 나타나기 전에input 요소 내부에 텍스트가 있어야합니다 .

참고:


11
다른 개발자에게 도움 : 부트 스트랩 CSS 플랫폼을 사용하는 경우 스타일 "-webkit-appearance : textfield;"를 제거하십시오. bootstrap.css에서 input [type = "search"] {-webkit-box-sizing : content-box; -moz-box-sizing : 컨텐츠 박스; 박스 크기 : 컨텐츠 박스; -웹킷 모양 : textfield; }
리카르도 바실 리치

1
X의 색을 바꾸는 방법이 있습니까?
rotaercz

1
@RiccardoBassilichi 내 css 파일을 확장하여 원래 bootstrap.css를 편집 할 필요가 없어도 여전히 작동합니까?
supersan June

나는 생각하지 않는다! 그러나 나는 CSS 마법사가 아닙니다! :-(
Riccardo Bassilichi 2016 년

2
불행히도 이것은 Firefox에서 지원하지 않습니다. developer.mozilla.org/en-US/docs/Web/CSS/…
Guillaume Husta

27

이미지 스타일의 재설정 버튼을 사용할 수 있습니다 ...

<form action="" method="get">
   <input type="text" name="search" required="required" placeholder="type here" />
   <input type="reset" value="" alt="clear" />
</form>

<style>
   input[type="text"]
   {
      height: 38px;
      font-size: 15pt;
   }

   input[type="text"]:invalid + input[type="reset"]{
     display: none;
   } 

   input[type="reset"]
   {
      background-image: url( http://png-5.findicons.com/files/icons/1150/tango/32/edit_clear.png );
      background-position: center center;
      background-repeat: no-repeat;
      height: 38px;
      width: 38px;
      border: none;
      background-color: transparent;
      cursor: pointer;
      position: relative;
      top: -9px;
      left: -44px;
   }
</style>

여기에서 실제로보십시오 : http://jsbin.com/uloli3/63


10
이것은 단지 하나의 필드가 아닌 전체 형태를 재설정합니다
konung

입력이 비어있을 때 리셋 이미지를 숨기는 방법은 무엇입니까? KOGI가 라이브 예를 들어 줄 수 있습니까?
Harry

24

CSS로 명확한 텍스트 상자를 만들었습니다. 작동시키기 위해 자바 스크립트 코드가 필요하지 않습니다

아래는 데모 링크입니다

http://codepen.io/shidhincr/pen/ICLBD


1
우수한! 브라우저 지원에 대한 일부 정보가 도움이 될 것입니다.
Ian Newson

1
오늘 FF 27.0.1에서 깨졌습니다.
Nick Westgate

3
'x'버튼을위한 공간을 만들기 위해 텍스트의 위치가 바뀌지 않습니다. 버튼 뒤의 텍스트를 볼 수 없습니다.
크림슨 크리스

이것은 여전히 ​​하나의 필드가 아닌 전체 양식을 지 웁니다.
Erik Veland

23

MDN에 따르면 , <input type="search" />현재 모든 최신 브라우저에서 지원됩니다 :

입력 유형 = 검색

<input type="search" value="Clear this." />


그러나 브라우저에서 일관된 다른 동작을 원한다면 JavaScript 만 필요한 간단한 대안이 있습니다.

옵션 1-항상 'x'를 표시하십시오 (예 : 여기).

Array.prototype.forEach.call(document.querySelectorAll('.clearable-input>[data-clear-input]'), function(el) {
  el.addEventListener('click', function(e) {
    e.target.previousElementSibling.value = '';
  });
});
.clearable-input {
  position: relative;
  display: inline-block;
}
.clearable-input > input {
  padding-right: 1.4em;
}
.clearable-input > [data-clear-input] {
  position: absolute;
  top: 0;
  right: 0;
  font-weight: bold;
  font-size: 1.4em;
  padding: 0 0.2em;
  line-height: 1em;
  cursor: pointer;
}
.clearable-input > input::-ms-clear {
  display: none;
}
<p>Always display the 'x':</p>

<div class="clearable-input">
  <input type="text" />
  <span data-clear-input>&times;</span>
</div>

<div class="clearable-input">
  <input type="text" value="Clear this." />
  <span data-clear-input>&times;</span>
</div>

옵션 2-필드 위로 마우스를 가져 가면 'x'만 표시 : (예 : 여기)

Array.prototype.forEach.call(document.querySelectorAll('.clearable-input>[data-clear-input]'), function(el) {
  el.addEventListener('click', function(e) {
    e.target.previousElementSibling.value = '';
  });
});
.clearable-input {
  position: relative;
  display: inline-block;
}
.clearable-input > input {
  padding-right: 1.4em;
}
.clearable-input:hover > [data-clear-input] {
  display: block;
}
.clearable-input > [data-clear-input] {
  display: none;
  position: absolute;
  top: 0;
  right: 0;
  font-weight: bold;
  font-size: 1.4em;
  padding: 0 0.2em;
  line-height: 1em;
  cursor: pointer;
}
.clearable-input > input::-ms-clear {
  display: none;
}
<p>Only display the 'x' when hovering over the field:</p>

<div class="clearable-input">
  <input type="text" />
  <span data-clear-input>&times;</span>
</div>

<div class="clearable-input">
  <input type="text" value="Clear this." />
  <span data-clear-input>&times;</span>
</div>

옵션 3- input요소에 값이있는 경우에만 'x'를 표시하십시오 (예 : 여기).

Array.prototype.forEach.call(document.querySelectorAll('.clearable-input'), function(el) {
  var input = el.querySelector('input');

  conditionallyHideClearIcon();
  input.addEventListener('input', conditionallyHideClearIcon);
  el.querySelector('[data-clear-input]').addEventListener('click', function(e) {
    input.value = '';
    conditionallyHideClearIcon();
  });

  function conditionallyHideClearIcon(e) {
    var target = (e && e.target) || input;
    target.nextElementSibling.style.display = target.value ? 'block' : 'none';
  }
});
.clearable-input {
  position: relative;
  display: inline-block;
}
.clearable-input > input {
  padding-right: 1.4em;
}
.clearable-input >[data-clear-input] {
  display: none;
  position: absolute;
  top: 0;
  right: 0;
  font-weight: bold;
  font-size: 1.4em;
  padding: 0 0.2em;
  line-height: 1em;
  cursor: pointer;
}
.clearable-input > input::-ms-clear {
  display: none;
}
<p>Only display the 'x' if the `input` element has a value:</p>

<div class="clearable-input">
  <input type="text" />
  <span data-clear-input>&times;</span>
</div>

<div class="clearable-input">
  <input type="text" value="Clear this." />
  <span data-clear-input>&times;</span>
</div>


9

주위를 비행하는 솔루션이 실제로 우리의 요구 사항을 충족 시키지 못했기 때문에 jQuery-ClearSearch 라는 간단한 jQuery 플러그인을 만들었습니다 .

그것을 사용하는 것은 쉽습니다 :

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

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

예 : http://jsfiddle.net/wldaunfr/FERw3/


Firefox 45에서 작업
Jeff Davis

1
최신 Chrome에서 작동하지 않는 것 같습니다 (v.70 ~ 2018 년 11 월)
Ben Clarke

3

편집 : 이 링크를 찾았습니다. 도움이 되길 바랍니다. http://viralpatel.net/blogs/2011/02/clearable-textbox-jquery.html

입력 텍스트 오른쪽에 원하는 것을 언급했습니다. 따라서 가장 좋은 방법은 입력 상자 옆에 이미지를 만드는 것입니다. 상자 내부를보고있는 경우 배경 이미지를 사용할 수 있지만 상자를 지우는 스크립트를 작성하지 못할 수 있습니다.

따라서 텍스트 상자를 지우려면 JavaScript 코드를 삽입하고 이미지화하고 작성하십시오.


입력 상자의 오른쪽에 의미가 있었지만 Google처럼 입력 자체 내부
Giovanni Di Milia

버튼을 모방 한 배경 이미지를 사용하고 다음 코드를 사용하십시오<input type="text" name="Search" value="Search..." onclick="this.value='';">
Jaspero

이것은 내가하고 싶은 일이 아닙니다 : 클릭하면 입력을 지우는 아이콘 만 원합니다 ....
Giovanni Di Milia

3

Google처럼 원한다면 "X"가 실제로 <input> 그것들은 텍스트 상자처럼 보이도록 외부 컨테이너와 함께 나란히 있습니다.

HTML :

<form>
    <span class="x-input">
        <input type="text" class="x-input-text" />
        <input type="reset" />
    </span>
</form>

CSS :

.x-input {
    border: 1px solid #ccc;
}

.x-input input.x-input-text {
    border: 0;
    outline: 0;
}

예 : http://jsfiddle.net/VTvNX/


1

이 같은?? JSfiddle 데모

    <!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
    .searchinput{
    display:inline-block;vertical-align: bottom;
    width:30%;padding: 5px;padding-right:27px;border:1px solid #ccc;
        outline: none;
}
        .clearspace{width: 20px;display: inline-block;margin-left:-25px;
}
.clear {
    width: 20px;
    transition: max-width 0.3s;overflow: hidden;float: right;
    display: block;max-width: 0px;
}

.show {
    cursor: pointer;width: 20px;max-width:20px;
}
form{white-space: nowrap;}

    </style>
</head>
<body>
<form>
<input type="text" class="searchinput">
</form>
<script src="jquery-1.11.3.min.js" type="text/javascript"></script> <script>
$(document).ready(function() {
$("input.searchinput").after('<span class="clearspace"><i class="clear" title="clear">&cross;</i></span>');
$("input.searchinput").on('keyup input',function(){
if ($(this).val()) {$(".clear").addClass("show");} else {$(".clear").removeClass("show");}
});
$('.clear').click(function(){
    $('input.searchinput').val('').focus();
    $(".clear").removeClass("show");
});
});
</script>
</body>
</html>

1
<form action="" method="get">
   <input type="text" name="search" required="required" placeholder="type here" />
   <input type="reset" value="" alt="clear" />
</form>

<style>
   input[type="text"]
   {
      height: 38px;
      font-size: 15pt;
   }

   input[type="text"]:invalid + input[type="reset"]{
     display: none;
   } 

   input[type="reset"]
   {
      background-image: url( http://png-5.findicons.com/files/icons/1150/tango/32/edit_clear.png );
      background-position: center center;
      background-repeat: no-repeat;
      height: 38px;
      width: 38px;
      border: none;
      background-color: transparent;
      cursor: pointer;
      position: relative;
      top: -9px;
      left: -44px;
   }
</style>

1

부트 스트랩없이이 명령으로 수행 할 수 있습니다.

Array.from(document.querySelectorAll('.search-field')).forEach(field => {
  field.querySelector('span').addEventListener('click', e => {
    field.querySelector('input').value = '';
  });
});
:root {
  --theme-color: teal;
}

.wrapper {
  width: 80%;
  margin: 0 auto;
}

div {
  position: relative;
}

input {
  background:none;
  outline:none;
  display: inline-block;
  width: 100%;
  margin: 8px 0;
  padding: 13px 15px;
  padding-right: 42.5px;
  border: 1px solid var(--theme-color);
  border-radius: 5px;
  box-sizing: border-box;
}

span {
  position: absolute;
  top: 0;
  right: 0;
  margin: 8px 0;
  padding: 13px 15px;
  color: var(--theme-color);
  font-weight: bold;
  cursor: pointer;
}
span:after {
  content: '\2716';
}
<div class="wrapper">
  <div class="search-field">
    <input placeholder="Search..." />
    <span></span>
  </div>
</div>


0

다음은 jQuery 플러그인과 마지막 데모입니다.

http://jsfiddle.net/e4qhW/3/

나는 주로 예 (그리고 개인적인 도전)를 설명하기 위해했습니다. 공감대는 환영하지만 다른 답변은 제 시간에 잘 전달되며 적절한 인정을받을 가치가 있습니다.

여전히 제 생각에는 UI 라이브러리의 일부가 아닌 이상 과도하게 설계된 팽창입니다.


내용을 지우고 다시 입력하면 ... x더 이상 버튼이 없습니다
Roko C. Buljan

hahaha는 2) 오래된 버그처럼 보입니다.;) 여전히 당신을 만나서 반갑습니다
Roko C. Buljan


0

jquery 플러그인을 사용하여 사용자 정의 옵션을 추가하고 새 플러그인을 만드는 데 필요에 맞게 조정했습니다. https://github.com/david-dlc-cerezo/jquery-clearField에서 찾을 수 있습니다.

간단한 사용법의 예 :

<script src='http://code.jquery.com/jquery-1.9.1.js'></script>
<script src='http://code.jquery.com/ui/1.10.3/jquery-ui.js'></script>
<script src='src/jquery.clearField.js'></script>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
<link rel="stylesheet" href="css/jquery.clearField.css">

<table>
    <tr>
        <td><input name="test1" id="test1" clas="test" type='text'></td>
        <td>Empty</td>
    </tr>
    <tr>
        <td><input name="test2" id="test2" clas="test" type='text' value='abc'></td>
        <td>Not empty</td>
    </tr>
</table>

<script>
    $('.test').clearField();
</script>

이와 같은 것을 얻기 :

여기에 이미지 설명을 입력하십시오



0

CSS 또는 이미지 파일을 포함 할 필요가 없습니다. 대포 jQuery UI 라이브러리 전체를 포함 할 필요가 없습니다. 나는 당신을 위해 마술을하는 가벼운 jQuery 플러그인을 작성했습니다. 당신이 필요하다 jQuery플러그인 . =)

jQuery InputSearch 몰래 엿보기

여기에서 바이올린 : jQuery InputSearch demo .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.