Javascript - 我无法在字符串的开头连接

Ric*_*oss 0 javascript jquery string-concatenation

这就是我想要做的事情:

检查我的字符串中是否有第一个字符"@",如果没有,请添加它.

这是我的代码:

$(document).ready(function(){

    $("#twitter").blur(function() {
            var s = $("#twitter").val();
            alert(s);
            var isAt = s.charAt(0);
            alert(isAt);
            if(isAt !== "@") {
                alert("lol");
                s = "@" + s;
            }
        });
});
Run Code Online (Sandbox Code Playgroud)

问题:

当我选择下一个输入(反过来模糊#twitter)当我输入"Rick"时,它的lol'ing但没有将输入值设置为"@Rick".

有什么想法吗?

jma*_*777 6

改变这个:

s = "@" + s;
Run Code Online (Sandbox Code Playgroud)

对此:

$("#twitter").val('@' + s);
Run Code Online (Sandbox Code Playgroud)

问题是您正在更新存储在s引用中的值,但该变量与输入字段本身之间没有动态绑定(即,您必须#twitter手动更新该值).


编辑:正如下面@epascarello所建议的那样,这可能是一个更清洁的解决方案:

$(document).ready(function(){
    $('#twitter').blur(function() {
        var $this = $(this),
            val = $this.val();
        if (val.charAt(0) !== '@') {
            $this.val('@' + val);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

而且......只是为了它的另一种方法:

$(document).ready(function(){
    $('#twitter').blur(function() {
        if (this.value.charAt(0) === '@') return;
        $(this).val(function(i, v) { return '@' + v });
    });
});
Run Code Online (Sandbox Code Playgroud)

多一个...

$(document).on('blur', '#twitter', function() {
    $(this).val(function(i, v) {
        return v.replace(/(@)?(.*)/, '@$2')
    });
});
Run Code Online (Sandbox Code Playgroud)

注意:你应该使用第一个或第二个...我在这里得到了深奥......

  • 更好的是`this.value ='@'+ s;`或`$(this).val('@'+ s)` (3认同)