【问题标题】:Change digits for SSN with jquery使用 jquery 更改 SSN 的数字
【发布时间】:2013-11-15 14:54:45
【问题描述】:

我发现这个脚本可以隐藏 SSN 的数字。我也想通过切换按钮来完成模糊/焦点事件的作用(并且按钮上的文本也会改变)。我试图通过 Click 事件来做到这一点,但需要帮助。有人可以看看小提琴。

我还希望 HIDDEN 状态显示 SSN 的最后 4 位,而 VISIBLE 状态显示所有数字。

HTML
<form>
<input name="ssn" id="ssn" type="text">
<button id="submit">Show SSN</button>

jQuery          
var retrieveValue = function(ev){
    var $this = $(this),
        val = $this.data('value');

    if (val) {
        $this.val(val);
    }
},
hideValue = function(ev){
    var $this = $(this);

    $this.data('value', $this.val());
    $this.val($this.val().replace(/^\d{5}/, '*****'));
};

$('#ssn').focus(retrieveValue);

$('#ssn').blur(hideValue);

$("#submit").click(function () {
    // check the visibility of the next element in the DOM
    if ($(this).text("Hide SSN")) {
        $('#ssn').val(retrieveValue);
        } else {
       $('#ssn').val(hideValue);
       $('#submit').text("Show SSN");
    }
});

点击[这里] (http://jsfiddle.net/squirc77/wEwYz/)

【问题讨论】:

    标签: jquery replace digits


    【解决方案1】:

    有一种更简单的方法可以实现这一点,它涉及将 &lt;input&gt; 从文本切换到密码

    JSFidlle 3 text fields

    HTML

    <input type="text" name="ssn1" id="ssn1" size="2" maxlength="3" style="text-align:center;" value="555">
    &nbsp;
    <input type="text" name="ssn2" id="ssn2" size="2" maxlength="2" style="text-align:center;" value="55">
    &nbsp;
    <input type="text" name="ssn3" id="ssn3" size="2" maxlength="4" style="text-align:center;" value="5555">
    &nbsp;
    <input type="button" id="ssn_button" value="Show/Hide SSN">
    

    JS

    $(document).ready(function(){
        // Page has loaded, hide SSN1 and SSN2
        $('#ssn1, #ssn2').attr({'type':'password'});
    
        // Listen for Focus on any three fields
        $('#ssn1, #ssn2, #ssn3').on('focus', function(){
            $('#ssn1, #ssn2').attr({'type':'text'});
        });
    
        // Listen for Blur on any three fields
        $('#ssn1, #ssn2, #ssn3').on('blur', function(){
            $('#ssn1, #ssn2').attr({'type':'password'});
        });
    
        // Show/Hide SSN click
        $('#ssn_button').on('click', function(){
            // Alternate SSN1 and SSN2 based on current SSN1 state
            if($('#ssn1').attr('type') == 'password'){
                $('#ssn1').attr({'type':'text'});
                $('#ssn2').attr({'type':'text'});
            }
            else{
                $('#ssn1').attr({'type':'password'});
                $('#ssn2').attr({'type':'password'});
            }
        });
    });
    

    只为你 OP :)

    JSFiddle 1 text field

    【讨论】:

    • 但是,当页面加载和用户输入 SSN 时,我需要显示最后 4 位数字。用户需要在单击按钮时能够看到整个 SSN,然后再次单击以恢复到第一个视图。
    • @squirc77 这对于单个 &lt;input&gt; 字段将非常棘手。如果您愿意将 SSN 拆分为 3 个单独的 &lt;input&gt; 字段,那么它会容易 100 倍。如果您确实保留了单个 &lt;input&gt; 字段,那么您将不得不考虑未填写整个 SSN 的用户,然后继续填写表单。如果您需要涉及 3 个&lt;input&gt; 字段的解决方案,请告诉我。
    • 是的,我真的很想看看使用 3 个 字段的解决方案。非常感谢!
    • 这太棒了!然而,一个挥之不去的问题。我想出了如何将“边缘”文件放在我的页面上来完成这项工作。有没有办法让它在没有它的情况下工作?用IE8?我们仍然支持 IE8。谢谢!
    • @squirc77 JSFiddle 上的edge jQuery 文件只是指最新的 jQuery 构建,它应该是来自 jquery.com 的 1.10.2,您实际上可以从他们的站点下载该文件并将其包含在您的站点,或者您可以链接到像 &lt;script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"&gt;&lt;/script&gt; 这样的 Google API 版本,它在 IE8 上运行应该没有问题,因为任何 1.x 版本都支持 IE8,但如果您要使用 2.x,那么它仅支持 IE9 及更高版本。
    【解决方案2】:

    使用 Css -webkit-filter: 模糊。使用真正的模糊效果更容易完成。

    jsfiddle

    HTML:

    <form>
        <input name="ssn" id="ssn" type="text" class="show"/>
        <button id="submit">Hide SSN</button>
    </form>
    

    CSS:

    .blur{
        -webkit-filter: blur(2px);
        opacity: 0.5;
    }
    

    JS:

    $('#submit').click(function(event){
        event.preventDefault();
        $("#ssn").toggleClass(function(){
            if($(this).attr('class')=='blur'){
                $('#submit').text("Hide SSN");
                return 'show';
            }else{
                $('#submit').text("Show SSN");
                return 'blur';
            }
        });
    });
    

    【讨论】:

    • 我真的很喜欢您的解决方案,但 OP 对我的帖子的评论说他们希望现在可以看到最后 4 位数字。不知道有没有非webkit的模糊效果?
    【解决方案3】:

    一个只接受数字的输入

    var ssn = $('#ssn'), sub = $('#submit'), stored = ssn.val(), go;
    //only if stored has value and button says show, store ssn and toggle
    function vshow() {if (stored && go) { ssn.val(stored); cblur(); }};
    function vhide() {
        if (!go) {//only if button says hide
            stored = ssn.val();//set stored
            if(stored) {//if stored has value
                if (stored.length>4) {//check length
                    ssn.val(Array(stored.length-3).join('*')+stored.slice(-4));
                    cblur();//toggle
                }
            }
        }
    };
    function cblur() {
        sub.text(sub.text()=='Show SSN'?'Hide SSN':'Show SSN');//toggle
        if (sub.text()=='Show SSN') { go=true; }//show
        else if (sub.text()=='Hide SSN') { go=false; }//hide
    }
    ssn.blur(function() { vhide(); })//on blur
    .focus(function() { vshow(); })//on focus
    .keyup(function() {
        if (ssn.val().match(new RegExp('[^0-9]','g'))) {//if non-digit present
            ssn.val(ssn.val().replace(/[^\d]+/g,''));//remove non-digit
        }
    });
    sub.on('click', function () {
        if (go) { vshow(); }//show
        else { vhide(); }//hide
        return false;//prevents default behavior / remove to get it back
    });
    

    做了一个小提琴:http://jsfiddle.net/filever10/G36E3/

    编辑:为小提琴添加了错误报告/验证

    【讨论】:

    • 我真的很想看到这个作品。当我输入一个 9 位数字时,它会隐藏整个数字。我需要用 ***** 替换前 5 个数字。
    • 如果您聚焦文本字段并通过 Tab 或单击浏览器中的其他任何位置(例如空白)激活 blur,则它会中断。供将来参考:jsfiddle.net/filever10/G36E3
    • @squirc77 一切正常,并在小提琴上添加了验证。让我知道你的想法。我还替换了你必须让它只显示最后 4 个数字的正则表达式,所以如果有 5 个数字,它只会使第一个成为 *
    • @FiLeVeR10 - 这是另一个很棒的解决方案!我可以遵循大部分脚本,并将学习它来学习。我还需要这样的脚本才能与驾驶执照一起使用。修改此脚本,我将如何允许 Letters 和任何长度?我应该为此添加一个新问题吗?谢谢!
    • @FiLeVeR10 - 我通过研究正则表达式找到了解决方案,我需要将其更改为允许字符串以数字或字母开头...谢谢你.if (DL.val ().match(new RegExp('\w[a-z0-9]','g')))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多