在jQuery中,如何在用户输入时检测指定的字符串?

时间:2011-03-07 04:11:07

标签: javascript jquery javascript-events

就像在Facebook上输入评论并点击@username一样,它会对此作出反应,让您选择内联用户名。

使用jQuery,如何为[text:1]挂钩事件监听器。我想要在用户将[text:输入文本字段时触发事件。

3 个答案:

答案 0 :(得分:4)

Zurb创建了一个textchange插件,可以提供帮助。看看他们的“验证文本”示例,我相信它几乎正是你要找的......

http://www.zurb.com/playground/jquery-text-change-custom-event

答案 1 :(得分:2)

使用keyup函数来触发。拆分所有字符串并检查它。

[更新]:更多改进版本

<script>

var totalcount=0;

$(function (){

    $('#text').keyup(

        function (){

              var arr = $(this).val().split(" ");

              var matchitems = count('hello', arr);

              //console.log(matchitems);

              if(matchitems > totalcount){
                alert('hello');
                totalcount = matchitems;
              }
              if(matchitems < totalcount)
              {
                totalcount = matchitems;
              }

        }
    )

})

function count(value, array)
{
    var j=0;

    for(var i=0;i<array.length;i++)
    {

        if(array[i] == "hello"){
            j++;    
        }
    }
    return j;
}

</script>

<input type="text" id="text" />
})

</script>

<input type="text" id="text" />

答案 2 :(得分:1)

使用像@experimentX这样的keyup是您想要的方式b / c然后您就会知道您的用户已经输入了值。但是,在每个keyup事件中运行for循环都会非常昂贵。相反,既然您已经知道了您想要的价值,那么您可以使用预设regexp来搜索您的价值:

<input type="text" id="text" value="" />

<script>
    $(function () {
        var $input = $('#text');
        $input.keyup(function (e) {
            var regexp = /\[text\:/i,
                val = $(this).val();
            if (regexp.test(val)) {
                console.log('i have it: ', val);
            }
        });
    });
</script>

以下是关于如何编写实际regexp的其他方案。

  • 您希望字符串位于输入的最开头:var regexp = /^\[text\:/i;
  • 以上面的方式构建,但在您实际需要的文本前面加入任意数量的空格:var regexp = /^\s+?\[text\:/i;