jQuery在角色旁边找到一个角色" @"使用.next()函数

时间:2017-07-14 07:01:17

标签: jquery

我正在研究项目的评论模块,

场景:当用户按下 @ 字符并键入类似 @jasmine 的系统时,应该在 @旁边获取该特定关键字字符 我正在实现这个场景并得到像这样的关键词,

$('#commen-text').keyup(function (e) {
if (e.which === 50 && e.next()) {
    var key = $(e.next());
    var filters = {};
    filters['keyword'] = key;
    $.ajax({
        url: siteUrl + "filter/user",
        data: {filters: filters},
        type: "get",
        success: function (output) {
            return;
            alert(output);
        }
      });

    }
 });

但它给了我以下错误

  

未捕获的TypeError:e.next不是函数

请建议我在这方面该怎么办

4 个答案:

答案 0 :(得分:1)

我已经对您的代码进行了一些修改,但我认为它可以解决问题:

$('#commen-text').keyup(function(e) {
  var current_text = $(this).val();
  if (e.which === 13 && current_text.indexOf("@") >= 0) {
    var key = current_text.split('@')[1][0];
    console.log(key);
    var filters = {};
    filters['keyword'] = key;
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="w100"> <textarea placeholder="Enter your comment here" id="commen-text"></textarea> </div>
<!--w100-->

答案 1 :(得分:1)

我稍微修改了你的代码,e.next不是一个函数。这里e指的是事件不是元素

$('#commen-text').keyup(function (e) {

if (this.value.indexOf("@") != -1 ) {
    var key = this.value.substring(1, this.value.length);
     debugger;
    var filters = {};
    filters['keyword'] = key;
    $.ajax({
        url: siteUrl + "filter/user",
        data: {filters: filters},
        type: "get",
        success: function (output) {
            return;
            alert(output);
        }
      });

    }
 });

答案 2 :(得分:1)

试试这个..我用indexOf来搜索&#39; @&#39;登录输入字段..

编辑:仅在@符号后才捕获mod ...尝试将keyup替换为setTimeout,例如:500ms然后拉ajax

正如我所看到的那样,你必须注意“松散焦点”&#39;或类似的事件,以了解用户什么时候离开textarea,然后建立filters关键字..然后触发ajax,而不是更早,因为你会很快发射它我猜...

&#13;
&#13;
$('#commen-text').keyup(function (e) {
    var key = $(this).val();
    if (key.indexOf('@') > -1 ) {
       console.log( key.split('@')[1] );
    }
 });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="w100"> <textarea placeholder="Enter your comment here" id="commen-text"></textarea> </div>
&#13;
&#13;
&#13;

答案 3 :(得分:1)

  

对于多个 @

var names={};
$("#names").focusout(function(){
  $(this).val().split(" ").forEach(function(value){
    value.split("@").slice(1).forEach(function(secValue){
        names[secValue]=secValue
    });
  });
  
    console.log(Object.keys(names));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


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