0

我在使用 javascript 时遇到了一些麻烦。

事实上,我的数据库中有许多缩写和等价的记录,

例如,替换 tel => 电话等...

所以我有这个功能

$('#tags').keyup(function(e){
    var code = e.which ? e.which : e.keyCode;
     console.log(code);
    if (code == 'tel'){
        var input = this.value;
        input = input.substr(0, input.length -1);
        console.log(input);
        input += 'tel';
        this.value = input;        
    }

});

实际上这不起作用,问题是我在javascript的控制台中没有错误。

任何帮助将不胜感激。

亲切的问候。

SP。

​</p>

4

5 回答 5

7

这应该有效:

$('#tags').keyup(function(e){
    var code = e.which ? e.which : e.keyCode;
    var input = this.value;
    if (input.indexOf('tel') != -1) {
       this.value = this.value.replace(/\btel\b/gi,'telephone');

    }

});

这是一个小提琴

于 2012-10-31T08:54:40.707 回答
3

使用keyup()事件处理程序时,仅返回按下键的键码。例如 x 导致 e = 88。

用于$("#tags").val()获取输入元素的值。

于 2012-10-31T08:50:27.163 回答
3

keyCodeor属性不返回字符串,which甚至不返回单个字符。它返回代表客户端敲击的键的键代码。如果要获取对应的 char: String.fromCharCode(e.which || e.keyCode);
例如,如果用户按下a键,键码将为97String.fromCharCode(97)返回a

如果您想知道天气或元素的当前值是否包含缩写:tel,您需要做的是:

$('#tags').keyup(function(e)
{
    this.value = this.value.replace(/\btel\b/gi,'telephone');
});

这是未经测试的,很可能需要更多的工作,但是AFAIK,你想替换所有出现的telby telephone。我使用的表达式/\btel\b/替换所有 substrings tel,前提是它们前后有一个单词边界(以避免替换单词的一部分)。
并不是说字符串的结尾和破折号也都被视为单词边界。如果我想打字television,我最终会打字telephoneevision。为避免这种情况,您需要稍微复杂一点的表达式。这是一个如何避免 JS 将破折号视为边界的示例,只需对其进行处理以考虑字符串结尾

更新

也许这个表达式并不像我想象的那么简单,所以我建议你使用以下表达式:

this.value = this.value.replace(/(?:(\-?\b))tel(?:(\b\-?.))/gi,function(all,b1,b2)
{
    if (b1 === '-' || b2.charAt(0) === '-')
    {//dash, don't replace
        return all;
    }//replace
    return b1 + 'telephone' + b2;
});

输入:我需要一个电话,很快==>我需要一个电话,很快
我需要一个电话==>我需要一个电话(如果用户还在打字,不要替换,他可能正在输入望远镜,提交时替换或模糊)
我想预订今晚的旅馆==>我想预订今晚的旅馆
访问特拉维夫==>访问特拉维夫

于 2012-10-31T08:57:39.417 回答
1

当以这种方式使用 keypress 时,code变量将包含按下字符的字符代码。不是像预期的'tel'那样的字符串。您可以使用onkeyup/ onchangeevent 并检查输入元素的 val() 并使用replace()将缩写更改为预期的字符串。

$('#tags').keyup(function(e){

    var elem = $(this);
        var input = elem.val();

        // input = input.substr(0, input.length -1);  // This might not be necessary
        console.log(input);

        // do the replacement
        input = input.replace('tel','telephone');

        elem.val(input);        
    }

});
于 2012-10-31T08:53:36.470 回答
0

使用replace方法替换字符串中的单词。

例如:

var str = "This is AIR";
var newstr = str.replace("AIR", "All India Radio");
console.log(newstr);
于 2012-10-31T08:44:21.207 回答