【问题标题】:Javascript - I can't concatenate at the beginning of my stringJavascript - 我无法在字符串的开头连接
【发布时间】:2013-04-03 17:55:40
【问题描述】:

这是我想做的:

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

这是我的代码:

$(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;
            }
        });
});

问题:

当我跳到下一个输入时(反过来模糊#twitter),当我输入“Rick”时,它会很有趣,但没有将输入的值设置为“@Rick”。

有什么想法吗?

【问题讨论】:

  • 你没有对s做任何事情,函数就结束了。您希望在这里发生什么?

标签: javascript jquery string-concatenation


【解决方案1】:

改变这个:

s = "@" + s;

到这里:

$("#twitter").val('@' + s);

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


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

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

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

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

还有一个……

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

注意:您可能应该使用第一个或第二个...我在这里变得深奥...

【讨论】:

  • 最好是this.value = '@' + s;$(this).val('@' + s)
  • @jmar777 将val 设置为函数到底有什么作用?
  • @asawyer $().val(function(index, value)) 允许您提供一个“setter”函数,该函数传递一个索引(如果您对多个元素进行操作,这很有用)以及当前值。函数的返回值成为元素的新值。基本上,当您需要考虑当前值时,它是一种更新某些值的便捷语法。 documentation 中有更多信息。
  • @jmar777 非常感谢,这真的很有用,我从来不知道它。
  • @asawyer 没问题! jQuery 中的大多数 setter 方法现在都提供了类似的语法(从 1.4 开始),因此值得检查文档以查看它是否可用。
【解决方案2】:
$(document).ready(function(){
    $("#twitter").blur(function() {
        var s = $("#twitter").val();
        alert(s);
        var isAt = s.charAt(0);
        alert(isAt);
        if(isAt !== "@") {
            alert("lol");
            $("#twitter").val("@" + s);
        }
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多