当前位置:Gxlcms > JavaScript > input的blur事件与button的click事件详细介绍

input的blur事件与button的click事件详细介绍

时间:2021-07-01 10:21:17 帮助过:28人阅读

先来一段引子,最近在写手机h5页面,主要是一些登陆注册方面的,最绕不开的就是表单元素。

我想实现的是:在输入框后边有一个删除图标,当输入东西的时候触发事件,显示删除图标,点击该图标会删除之前输入的内容,离开输入框,该图标消失。

  1. <div class="wrapper">
  2. <div class="count">
  3. <label for="person">手机号</label>
  4. <input id="person" type="text" placeholder="请输入手机号">
  5. <i class="r btn_delete delete1"><img src="../imgs/btn_Eliminate.png"></i>
  6. </div>
  7. <div class="count">
  8. <label for="pwd">密 码</label>
  9. <input id="pwd" type="text" placeholder="6-18位,建议数字、字母、符号组合">
  10. <i class="r btn_delete delete2"><img src="../imgs/btn_Eliminate.png"></i>
  11. <i class="r hide_switch"><img src="../imgs/btn_display_switch.png"></i>
  12. </div>
  13. <div class="confirm">
  14. <label for="msg">短信验证码</label>
  15. <input id="msg" type="text" placeholder="请输入短信验证码">
  16. <i class="r btn_delete delete3"><img src="../imgs/btn_Eliminate.png"></i>
  17. <button class="r receive_msg">获取验证码</button>
  18. </div></div><div class="log"> <button class="btn_register">立即注册</button></div>

之前的预想是:为输入框添加focus和blur事件;

  1. $("#person, #modify_name").focus(function(event) {
  2. event.preventDefault();
  3. $(this).prev().css("color", "#f68121"); if ($(this).val() === person_val) {
  4. $(this).val("").css("color", "#000").keyup(function() {
  5. $(".btn_delete").css("visibility", "visible").bind("click", function(event) {
  6. event.preventDefault();
  7. $("#person").val("").focus();
  8. $(".btn_delete").css("visibility", "hidden");
  9. });
  10. });
  11. }
  12. });
  13. $("#person, modify_name").blur(function(event) {
  14. event.preventDefault(); //$(".btn_delete").css("visibility", "hidden");
  15. $(this).prev().css("color", "#000"); if ($(this).val() === "") {
  16. $(this).css("color", "#acacac").val(person_val);
  17. }
  18. });

但是遇到了问题:当我输入后点击删除图标,同时也触发了blur事件,此时图标消失,也就点击不到图标了,但是如果不在blur时让图标消失,则每一次输入完成后input失去焦点,图标就一直显示着。

这个问题向个梗,一直卡着,直到今天。。。我又遇到了另外一个问题!!

问题描述:当我在输入框输入完内容后,直接点击注册按钮,第一次点击,没反应,每一次都是焦点在input时点击button,需要点击两次,button才会有所反应;

这时我才意识到,这是blur抢占了click的风头,那么我就得去blur里找问题,果然,如果我给blur的执行加一个延时....

  1. $("#person, #pwd, #msg, #mail").focus(function(event) {
  2. event.preventDefault();
  3. if ($(this).attr("placeholder") === person_plc) {
  4. that = $(this);
  5. } else if ($(this).attr("placeholder") === pwd_plc) {
  6. that = $(this);
  7. } else {
  8. that = $(this);
  9. }
  10. that.prev().css("color", "#f68121");
  11. that.css("color", "#000").keyup(function() {
  12. that.next(".btn_delete").css("visibility", "visible").bind("click", function(event) {
  13. $(this).prev().css("color", "#acacac").val("").blur().prev().css("color", "#000");
  14. $(".btn_delete").css("visibility", "hidden");
  15. });
  16. });
  17. })
  18. $("#person").blur(function(event) {
  19. event.preventDefault();
  20. setTimeout(function() { // console.log("blur");
  21. $(".btn_delete").css("visibility", "hidden");
  22. $("#person").prev().css("color", "#000");
  23. if ($("#person").val() === "") {
  24. $("#person").css("color", "#acacac");
  25. }
  26. }, 100);
  27. });

万事大吉,一下子世界都安静了。。。

然后就没有然后了,连之前的删除小图标也听话了,一blur就能隐藏,可是我的js代码重复代码非常之多,如下:

  1. var person_val = $("#person").val(); var person_plc = $("#person").attr("placeholder"); var pwd_plc = $("#pwd").attr("placeholder"); var that;
  2. $("#person, #pwd, #msg, #mail").focus(function(event) {
  3. event.preventDefault();
  4. if ($(this).attr("placeholder") === person_plc) {
  5. that = $(this);
  6. } else if ($(this).attr("placeholder") === pwd_plc) {
  7. that = $(this);
  8. } else {
  9. that = $(this);
  10. }
  11. that.prev().css("color", "#f68121");
  12. that.css("color", "#000").keyup(function() {
  13. that.next(".btn_delete").css("visibility", "visible").bind("click", function(event) {
  14. $(this).prev().css("color", "#acacac").val("").blur().prev().css("color", "#000");
  15. $(".btn_delete").css("visibility", "hidden");
  16. });
  17. });
  18. })
  19. $("#person").blur(function(event) {
  20. event.preventDefault();
  21. setTimeout(function() { // console.log("blur");
  22. $(".btn_delete").css("visibility", "hidden");
  23. $("#person").prev().css("color", "#000");
  24. if ($("#person").val() === "") {
  25. $("#person").css("color", "#acacac");
  26. }
  27. }, 100);
  28. });
  29. $("#pwd").blur(function(event) {
  30. event.preventDefault();
  31. setTimeout(function() { // console.log("blur");
  32. $(".btn_delete").css("visibility", "hidden");
  33. $("#pwd").prev().css("color", "#000");
  34. if ($("#pwd").val() === "") {
  35. $("#pwd").css("color", "#acacac");
  36. }
  37. }, 100);
  38. });
  39. $("#msg").blur(function(event) {
  40. event.preventDefault();
  41. setTimeout(function() { // console.log("blur");
  42. $(".btn_delete").css("visibility", "hidden");
  43. $("#msg").prev().css("color", "#000");
  44. if ($("#msg").val() === "") {
  45. $("#msg").css("color", "#acacac");
  46. }
  47. }, 100);
  48. });

并且,我甚至都不知道第一个问题是怎么被解决的,在此也想向大家请教一下,为什么加一个定时之后,我再用$(this)就取不到当前的对象,必须得像$("#person")这样重新取,导致我还得为每一个input添加一个blur事件,不能集中处理,或者,其实这段代码是可以简化的,只是我还没想到。。。还请各方同学多多指教。

以上就是input的blur事件与button的click事件详细介绍的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行