【问题标题】:Show/hide clear icon inside input field not working properly在输入字段内显示/隐藏清除图标无法正常工作
【发布时间】:2018-12-28 23:13:24
【问题描述】:

我创建了一个输入,带有一个清除输入文本的图标。

我最初将其设置为显示:无。 当您专注于输入时,会出现我想要的清除图标,但是当您单击清除图标时,它会消失并且不会清除输入文本,但是只有当您再次专注于输入时才会重新出现,这是我不想要的它这样做,因为它应该保持可见,直到你点击输入,然后它应该隐藏......

所以用例应该是:

  1. 清除图标最初应设置为隐藏(在 css 中或可以是 jQuery)
  2. 当您专注于输入时,应显示清除图标
  3. 当您点击输入时,清除图标应该再次隐藏

我的脚本运行不正常,我自己尝试了多种方法来解决它,但不,无法解决。

$("input")
  .focus(function() {
    $(this).attr("placeholder", "enter your email address...");
    $(".material-icons").show();
  })
  .blur(function() {
    $(".material-icons").hide();
    $(this).attr("placeholder", "input here");
    $(".clear-input").click(function() {
      $(this).prev().val("").focus();
    });
  });
html {
  box-sizing: border-box;
}

form {
  margin: 20vh;
}

.container {
  border: none;
  width: 248px;
  position: relative;
}

input {
  border: 1px solid pink;
  box-shadow: none;
  padding: 8px 100px 8px 5px;
  position: relative;
}

input:hover {
  border: 1px solid #222;
}

input:focus {
  border: 1px solid blue;
}

.material-icons {
  position: absolute;
  right: 0px;
  top: 0px;
  margin: auto;
  font-size: 3px;
  cursor: pointer;
  color: #aaa;
  padding: 8px;
  display: none;
}
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <div class="container">
    <input class="type-here" type="text" placeholder="input here" />
    <i class="clear-input material-icons">clear</i>
  </div>
</form>

【问题讨论】:

  • $(".clear-input").click移出模糊事件处理程序
  • @charlietfl 我应该把它放在哪里?
  • $('input') 事件监听器之前或之后。只是不在里面
  • @charlietfl 我把它移到了输入功能之外,但是当我点击清除图标时它仍然隐藏起来......你能给我一个sn-p吗?我不确定为什么它不起作用。

标签: javascript jquery html css show-hide


【解决方案1】:

只需将 click 更改为 mousedown,因为 blur 比 click 事件更早触发并删除 click 事件并将 click 事件置于焦点事件中。

$(document).ready(function(){
  $(".material-icons").hide();
  $("input")
  .focus(function() {
    $(this).attr("placeholder", "enter your email address...");
    $(".material-icons").show();
    $(".clear-input").mousedown(function(e) {
      e.preventDefault();
      $(this).prev().val("");
    });
  })
  .blur(function() {
    $(".material-icons").hide();
    $(this).attr("placeholder", "input here");
  });
});
html {
  box-sizing: border-box;
}

form {
  margin: 20vh;
}

.container {
  border: none;
  width: 248px;
  position: relative;
}

input {
  border: 1px solid pink;
  box-shadow: none;
  padding: 8px 100px 8px 5px;
  position: relative;
}

input:hover {
  border: 1px solid #222;
}

input:focus {
  border: 1px solid blue;
}

.material-icons {
  position: absolute;
  right: 0px;
  top: 0px;
  margin: auto;
  font-size: 3px;
  cursor: pointer;
  color: #aaa;
  padding: 8px;
}
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
  <div class="container">
    <input class="type-here" type="text" placeholder="input here" />
    <i class="clear-input material-icons">clear</i>
  </div>
</form>

【讨论】:

  • 你的代码没有解决我的问题....X 在输入和输入文本时应该保持可见
  • 上面的代码到底有什么问题?如果您按 x 它会删除内容。您希望 X 在单击后仍然可见吗?
  • 是的,如果可能的话。 x 最初应该是隐藏的,在输入内部时保持可见,然后在您仅在输入外部单击时隐藏。
  • 我添加了一个 preventDefault 以防止在单击 X 时发生模糊。检查编辑的代码。
  • 这正是我所需要的。谢谢!顺便说一句,您知道为什么 display:none 最初无法隐藏 x 吗?
【解决方案2】:

这是一个有点不雅的解决方案:

$("input").focus(function() {
    $(this).attr("placeholder", "enter your email address...");
    $(".material-icons").show();
});


$('body').click(function(e){
   if ( !$(e.target).is('input') && !$(e.target).is('.material-icons') ) {
     $(".material-icons").hide();
   }
});

$('.clear-input').click(function(){
  $('input').val('')
}); 

http://jsfiddle.net/7ju9hqpt/44/

【讨论】:

  • 为 sn-p 干杯。
猜你喜欢
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 2022-01-06
  • 2020-06-06
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
相关资源
最近更新 更多