为什么这会在列表组项上打开(“单击”)后保留以前单击的 ID
Why does this retain previously clicked ids after on('click') on a list-group-item?
我的聊天室代码中有以下部分:
.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);
中使用的最后一个选定项目。如果有人能指出我哪里出了问题,那就太好了。谢谢。
编辑。 主要问题是当我点击发送时,消息会重复传递(我在发送之前选择的所有列表组项目 ID 的数量)。如果我只选择一个组并发送消息不会重复(这没关系。
稍微修改了你的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>
正如vijayP所建议的那样,你的$('#send_to_topic').click()
和$('#message_text').keydown()
应该生活在$('#groups a.list-group-item').click()
事件之外。
接下来,由于您的selected_group_id
变量是使用 var 关键字声明的,因此$('#groups a.list-group-item').click()
范围之外的函数无法访问它。所以你应该在所有这些事件之外声明这个变量,如下所示:
jQuery
$(document).ready(function () {
// Declare the selected_group_id outside of the events so they can access to it
var selected_group_id;
$('#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');
selected_group_id = this.id;
$(this).removeClass('active');
$(this).removeAttr('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;
}
});
});
相关文章:
- 单击其他元素或鼠标向上时隐藏输入框,但保留一次焦点
- 如何在单击“提交”按钮后保留经典 ASP 页(发生验证错误时)
- 保留选项后的滚动位置(单击时)
- 即使在单击提交按钮后仍保留单选按钮
- 单击提交按钮后如何保留文本框值
- 单击时如何在按钮周围保留矩形边框
- 使用promise.then时,是否可以保留在单击事件调用堆栈中
- 单击按钮后如何保留元素
- 在开发元素被确认后,在开发元素下方保留一个单击按钮
- 如何禁用单击但保留叠加效果
- 除非单击“提交”按钮,否则保留页面警报
- 具有可单击区域的网页图像,可将数据发送到服务器脚本,并保留在同一页面上,无需刷新
- 保留单击其单选按钮的文本框的值
- 如果我创建右键单击菜单,如何保留原始复制和粘贴功能
- 单击以关闭移动设备上的jQuery下拉菜单,同时保留其他行为
- 如何在编辑链接单击时首次加载页面时保留值
- 保留 Google 地图在复选框单击时缩放到 kml 图层
- 单击时更改图像,保留图像并在单击其他图像时删除
- 日期选择器 - 如何在单击提交按钮后保留所选值
- 允许用户单击关闭select2并保留自由文本