首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类似于citicards.com的html文本掩码模式(a*a)

类似于citicards.com的html文本掩码模式(a*a)
EN

Stack Overflow用户
提问于 2015-03-30 06:36:03
回答 3查看 99关注 0票数 1

citicards.com如何使用特殊掩码实现登录ID文本框?

当您键入"johndoe“并将焦点突出时,文本框将变成”jo*oe“。

有带图案的HTML5面具吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-30 07:13:47

下面是使用纯javascript实现所需行为的示例。这只是一个样本。在实际使用substr之前,您可能需要进行长度检查等。

代码语言:javascript
运行
复制
document.querySelector("input#accountName").addEventListener("blur", function() {
  var value = this.value;
  document.querySelector("#maskedAccountName").textContent=this.value.substr(0,2)+this.value.substr(2,value.length-2).replace(/./g,"*")+this.value.substr(this.value.length-2, this.value.length);
this.style.display = "none";
document.querySelector("#maskedAccountName").style.display = "block";
}, false);

document.querySelector("#maskedAccountName").addEventListener("click", function() {
   this.style.display = "none";
   document.querySelector("input#accountName").style.display = "block";
   document.querySelector("input#accountName").focus();
}, false);
代码语言:javascript
运行
复制
div#maskedAccountName {
  border: 1px solid rgba(231, 231, 231, 0.67);
  padding: 2px;
  display: none;
  border-top-style: inset;
  -webkit-appearance: textfield;
  background-color: white;
  width: 120px;

}
代码语言:javascript
运行
复制
  <input type="text" id="accountName">
  
  <div id="maskedAccountName">

  </div>

我之所以不更改现有的input值,是因为在表单提交中访问时,可能无法读取原始值。所以我创建了一个隐藏的div,它代替了原始的输入元素。您可以使用CSS将div样式设置为与输入元素相同。

票数 3
EN

Stack Overflow用户

发布于 2015-03-30 07:09:05

您必须使用JS/jQuery。首先计算从开始到结束的混合字母,然后用*替换所有其他内容,并附加到假输入字段中。

在这里您可以看到(将opacity替换为0以完全隐藏输入字段,display: none将无法在这里工作,因为您必须单击输入本身):

代码语言:javascript
运行
复制
$(document).ready(function() {
  $("#hField").focusin(
    function() {
      $('#hFieldSp').text($(this).val());
    });
  $("#hField").focusout(function() {
    var start = '';
    var end = '';
    var value = $(this).val();
    var stars = '';

    if (value.length < 3) {
      return;
    }

    if (value.length > 6) {
      start = value.substring(0, 2);
      end = value.substring(value.length - 2);
      stars = '*'.repeat(Math.max(1, value.length - 4));
    } else {
      start = value.substring(0, 1);
      end = value.substring(value.length - 1);
      stars = '*'.repeat(Math.max(1, value.length - 2));
    }

    $('#hFieldSp').text(start + stars + end);
  });

  $(document).on('input paste change', '#hField', function() {
    $('#hFieldSp').text($(this).val());
  });
});

String.prototype.repeat = function(num) {
  return new Array(num + 1).join(this);
}
代码语言:javascript
运行
复制
.wrapper {
  float: left;
  position: relative;
}
#hField,
#hFieldSp {
  width: 100px;
  height: 30px;
  line-height: 30px;
  border: 1px solid #ddd;
}
#hField {
  opacity: .2;
  position: absolute;
  left: 0;
  top: 0;
}
代码语言:javascript
运行
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
  <div id="hFieldSp"></div>
  <input type="text" id="hField" />
</div>

票数 1
EN

Stack Overflow用户

发布于 2015-03-30 07:34:05

我会用一个虚拟的输入来显示。然后在模糊时,将值传递到隐藏的输入,并在虚拟中修改文本。如果用户想要改变值,您也可能希望相反:在焦点上,将值从隐藏的输入复制到虚拟。这里有一个示例,不需要jQuery,如果输入中少于5个字符,它将生成所有*s。

代码语言:javascript
运行
复制
    var start = 0;
    var end = 4;
    var dummy_user = document.getElementById("user");
    var actual_user = document.getElementById("hidden_user");
    dummy_user.addEventListener("blur", function() {
        actual_user.value = dummy_user.value;
        if (dummy_user.value.length > 4) {
            start = 2;
            end = dummy_user.value.length - 2;
        }
        var val = "";
        for (var i = 0; i < start; i++) {
            val += dummy_user.value[i];
        }
        for (i = start; i < end; i++) {
            val += "*";
        }
        for (i = end; i < dummy_user.value.length; i++) {
            val += dummy_user.value[i];
        }
        dummy_user.value = val;
    });
    dummy_user.addEventListener("focus", function() {
        this.value = actual_user.value;
    });
代码语言:javascript
运行
复制
    <form action="">
        <input type="text" name="user" id="user">
        <input type="hidden" name="hidden_user" id="hidden_user" value="">
        <input type="password" name="password">
        <input type="submit" value="Sign in">
    </form>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29339752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档