Javascript JS/jQuery:在'#';在文本区

Javascript JS/jQuery:在'#';在文本区,javascript,jquery,string,hash,Javascript,Jquery,String,Hash,我正在创建一个智能文本区域,需要识别在“#”符号后键入的术语。这需要能够用于当前键入的术语,并且能够用于单个文本区域中“#”符号的多个实例。 当你在帖子中键入“@”符号标记某人时,它的工作方式与Facebook相同。将出现一个下拉列表,列表项将根据“#”符号后的术语进行筛选 如果用户要键入一个术语,然后在以后对其进行修改,那么这也需要起作用。我明白这会让事情变得有点复杂 实现此功能的最佳方法是什么?您可以捕获keyup事件并检查上次输入的内容,如下所示: $('#myTextAre

我正在创建一个智能文本区域,需要识别在“#”符号后键入的术语。这需要能够用于当前键入的术语,并且能够用于单个文本区域中“#”符号的多个实例。

当你在帖子中键入“@”符号标记某人时,它的工作方式与Facebook相同。将出现一个下拉列表,列表项将根据“#”符号后的术语进行筛选

如果用户要键入一个术语,然后在以后对其进行修改,那么这也需要起作用。我明白这会让事情变得有点复杂


实现此功能的最佳方法是什么?

您可以捕获keyup事件并检查上次输入的内容,如下所示:

       $('#myTextArea').keyup(function () {

            var len = $(this).val().length;

            if ($(this).val().substring(length - 1, 1) == '#') {

                // Do whatever you want to do here

            }

        });
编辑:

你是对的,你可以这样做:

$('#myTextArea').keypress(function (e) {

    if (e.which == 222) {

        // do something here

    }

});

您可以捕获keyup事件并检查上次输入的内容,如下所示:

       $('#myTextArea').keyup(function () {

            var len = $(this).val().length;

            if ($(this).val().substring(length - 1, 1) == '#') {

                // Do whatever you want to do here

            }

        });
编辑:

你是对的,你可以这样做:

$('#myTextArea').keypress(function (e) {

    if (e.which == 222) {

        // do something here

    }

});

我建议您查看自动完成小部件的jqueryui演示,特别是用于。具体原因如下:

  • 它会自动处理您提到的下拉小部件
  • 它演示了如何使用基于AJAX调用(我认为您需要)的项填充该下拉列表
  • Autocomplete缓存演示解析
    INPUT
    元素中的文本,试图确定用户当前键入的值是否已经缓存,并做出相应的反应。我假设您可以执行类似的操作来检查
    类型,并检查以前的
    标记是否也在被修改

  • 我建议您查看自动完成小部件的jqueryui演示,特别是用于。具体原因如下:

  • 它会自动处理您提到的下拉小部件
  • 它演示了如何使用基于AJAX调用(我认为您需要)的项填充该下拉列表
  • Autocomplete缓存演示解析
    INPUT
    元素中的文本,试图确定用户当前键入的值是否已经缓存,并做出相应的反应。我假设您可以执行类似的操作来检查
    类型,并检查以前的
    标记是否也在被修改

  • 我不知道它是否有用,但这里有一个查找哈希的小脚本。

    我不知道这是否有帮助,但这里有一个查找哈希值的小脚本。

    最初,您需要捕获正在按下的“#”键,然后捕获随后的按键并将其传递给一个函数,以处理自动完成要求。下面是代码的大致轮廓。您可能还需要捕捉空格键的按下以停止自动完成

    var hashKeyPressed = false;
    
    $('#TextArea').keyup(function(event) {
        if(event.keyCode == '222') {
            // this will catch the '#' key
            hashKeyPressed = true;
        }
        if(hashKeyPressed) {
            // Here you can start build up subsequent key presses into a string
            // and pass them to a function to handle the auto-completion
        }
    }); 
    

    最初,您需要捕获正在按下的“#”键,然后捕获随后的按键,并将其传递给函数以处理自动完成要求。下面是代码的大致轮廓。您可能还需要捕捉空格键的按下以停止自动完成

    var hashKeyPressed = false;
    
    $('#TextArea').keyup(function(event) {
        if(event.keyCode == '222') {
            // this will catch the '#' key
            hashKeyPressed = true;
        }
        if(hashKeyPressed) {
            // Here you can start build up subsequent key presses into a string
            // and pass them to a function to handle the auto-completion
        }
    }); 
    

    这只适用于整个字符串中的最后一个单词。如果用户返回更改哈希标记值,该怎么办?整个函数都被破坏了。是的,你是对的,我用另一种方法更新了它,可以解决这个问题。我关心的是存储和修改字符串中现有的哈希值,而不是捕获哈希键的按键。这只适用于整个字符串中的最后一个字。如果用户返回更改哈希标记值,该怎么办?整个函数都被破坏了。是的,你是对的,我已经用另一种方法更新了,可以解决这个问题。我关心的是在字符串中存储和修改现有的哈希值,而不是捕获哈希键的按键。如果用户修改现有的哈希标记,这将如何工作?或者说他们在输入散列标签的过程中发现拼写错误并按delete键进行更改。如果用户要修改现有的散列标签,这将如何工作?或者说他们在输入散列标签的过程中发现拼写错误并按下delete键进行更改。我正在寻找一种不受插件框架限制的更为定制的解决方案。我继续说,您可以非常灵活地定制Autocomplete小部件(既然您使用的是jQuery,为什么不可以呢),这绝对是一种享受。只是将其用于我自己的业务流程,并对此非常满意。:)如果这样的事情不适合你,那么,我想每个人都有自己的我正在寻找一个不受插件框架限制的更为定制的解决方案。我会继续讨论,你可以非常非常灵活地定制Autocomplete小部件(既然你正在使用jQuery,为什么不呢),这绝对是一种享受。只是将其用于我自己的业务流程,并对此非常满意。:)如果这样的事情不适合你,那么,我想每个人都有自己的D