javascript - 为什么这会保留列表组项目上 ('click' )之后先前单击的 id?

标签 javascript jquery twitter-bootstrap-3

我的聊天室代码有以下部分:

HTML

<div class="list-group">
  <a class="list-group-item" id="1" href="#">Group A</a>
  <a class="list-group-item" id="2" href="#">Group B</a>
  <a class="list-group-item" id="3" href="#">Group C</a>
  <a class="list-group-item" id="4" href="#">Group D</a>
</div>

<div class="message_box">
  <form action="#" class="form">
    <div class="form-group"></div>
    <div class="input-group">
      <textarea class="form-control message_text emojiable-message"
                name="message_text" id="message_text" rows="3"></textarea>
      <span class="input-group-addon btn btn-primary send_message_btn" name="send_message_btn"
            >
        Send
      </span>
    </div>
  </form>
</div>

jQuery

$(document).ready(function () {
    $('#groups a.list-group-item').on('click', function () {
    $(this).toggleClass("active");
        $(this).siblings().removeClass("active");

        //chage the textarea and btn id to single user.
        $('.send_message_btn').removeAttr('id');
        $('.send_message_btn').attr('id', 'send_to_topic');

        var selected_group_id = this.id;

        //Handle enter key press and mouse click (group)
        $('#send_to_topic').click(function(e) {

            alert(selected_group_id);

            //sendChatMessage(selected_group_id);
            return false;
        });

        $('#message_text').keydown(function(e) {
            if (e.keyCode == 13) {

                alert(selected_group_id);

                //sendChatMessage(selected_group_id);
                return false;
            }
        });

        $(this).removeClass('active');
        $(this).removeAttr('id');
  });
});

问题是,当我选择多个列表组项目,然后点击发送按钮时,alert(selected_group_id); 会打印我选择的所有项目的 ID。我只想选择要在 sendChatMessage(selected_group_id); 中使用的最后一个选定项目。如果有人能指出哪里出了问题那就太好了。谢谢。

Edit. The main problem is when I hit send the message gets delivered in duplicates (number of all list-group-item ids I had selected before sending). If I just select one group and send the message does not duplicate (which is okay.).

最佳答案

稍微修改了你的 HTML 和 JS 代码,它在这里工作。请看一下。

$(document).ready(function() {
  $('a.list-group-item').on('click', function() {
    $(this).toggleClass("active");
    $(this).siblings().removeClass("active");
  });

  //Handle enter key press and mouse click (group)
  $('#send_to_topic').click(function(e) {

    var selected_group_id = $(".list-group .active").attr("id");
    alert(selected_group_id);

    return false;
  });

  $('#message_text').keydown(function(e) {
    if (e.keyCode == 13) {
      var selected_group_id = $(".list-group .active").attr("id");
      alert(selected_group_id);

      //sendChatMessage(selected_group_id);
      return false;
    }
  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="list-group">
  <a class="list-group-item" id="1" href="#">Group A</a>
  <a class="list-group-item" id="2" href="#">Group B</a>
  <a class="list-group-item" id="3" href="#">Group C</a>
  <a class="list-group-item" id="4" href="#">Group D</a>
</div>

<div class="message_box">
  <form action="#" class="form">
    <div class="form-group"></div>
    <div class="input-group">
      <textarea class="form-control message_text emojiable-message" name="message_text" id="message_text" rows="3"></textarea>
      <span class="input-group-addon btn btn-primary send_message_btn" name="send_message_btn" id="send_to_topic">
        Send
      </span>
    </div>
  </form>
</div>

关于javascript - 为什么这会保留列表组项目上 ('click' )之后先前单击的 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38263783/

相关文章:

javascript - Wakanda Enterprise V1.1.0 调试器不喜欢 CryptoJS Sha256.js 模块

javascript - 如何实现第三方Javascript库?

php - 在 sql 调用之前显示 Bootstrap 警报

html - bootstrap pull-right 添加额外空间

javascript - Bootstrap 无法在管理模板下运行

javascript - 如何找出哪个 Javascript 导致 jQuery Ajax 请求?

javascript - 如何添加打卡时间和实际时间

javascript - 将表单字段转换为 JSON 对象

html - 需要有关粘性导航页脚(电话电子邮件fblink)布局的建议

javascript - 填写完所有 Google 输入字段后发出 'hi' 警报