【发布时间】:2018-06-25 19:29:55
【问题描述】:
刚开始学js,需要一点帮助:我有如下功能:
//SET CHAT BEHAVIOR
function chatSettings() {
console.log('ChatSettings called')
function BtnAndScrollBar(texteditor) {
console.log('BTNAndScrollBar called');
const sendBtn = $('.cl.active').find('.sendBtn');
const attachBtn = $('.cl.active').find('.attachBtn');
console.log(sendBtn)
}
function sendAndDeleteMessage(send) {
console.log(send);
}
var sendBtn = $('.cl.active').find('.sendBtn');
sendBtn.mousedown(function () {
sendAndDeleteMessage(this);
});
var textEditor1 = $('.cl.active').find('.chatTextarea');
textEditor1.on('focus change mousedown mouseout keyup mouseup', function (){
console.log(this);
BtnAndScrollBar(this)
});
}
$('document').ready(function () {
console.log('hello');
$('.tabs').tabs();
chatSettings();
});
我准备了一个js.fiddle - 正如您在单击文本区域时从console.log 中看到的那样,即使.cl.active 与相应的TAB 一起切换,事件监听器也总是监听#cl1。
如果.cl 处于活动状态,则文本区域中的事件只是相关的。我的目标是将所有三个 eventListener 包装成一个并将事件应用于活动流中的文本区域,但我尝试的所有方法都出错了......有人可以帮忙吗? #Dontrepeatyourself#DRY
【问题讨论】:
-
ID 在给定页面中必须是唯一的。 stackoverflow.com/questions/9454645/…
chatTextarea正在重复 -
与其单独选择每个,为什么不使用共享的
cl类全部选择它们? -
谢谢。这是一个复制粘贴错误...您的建议会产生问题 - 我尝试使用 $('.cl.active'),但它确实适用于第一个元素,并且在第二个元素激活后,它没有工作。可能是因为它只是在加载后启动。
-
您只希望该功能发生在活动元素上吗?问题中没有表达这一点。
标签: javascript jquery dry jquery-wrap