如何使用Javascript UI kit修改Weavy聊天按回车发消息的默认行为
修改Weavy聊天中回车键发送消息的默认行为
要自定义Weavy聊天里回车键的行为,核心思路是通过监听输入框的键盘事件,拦截默认的回车发送逻辑,替换成你需要的规则(比如回车换行、Ctrl+回车发送)。以下是具体实现方案:
1. 确保Weavy实例加载完成
Weavy的UI元素是动态初始化的,所以要先监听实例的ready事件,确保DOM元素已生成:
// 假设你的Weavy实例变量名为weavy weavy.on('ready', () => { // 在这里编写自定义逻辑 });
2. 拦截输入框的键盘事件
通过DOM选择器定位聊天输入框(选择器需根据Weavy实际DOM结构调整,可通过浏览器开发者工具查看),监听keydown事件并修改行为:
示例1:回车换行,Ctrl/Cmd+回车发送
weavy.on('ready', () => { // 监听根容器上的键盘事件(兼容输入框动态生成的场景) weavy.root.addEventListener('keydown', (e) => { const messageInput = e.target.closest('.wy-message-input'); if (!messageInput || e.key !== 'Enter') return; // 未按住Ctrl/Cmd时,阻止默认发送,插入换行 if (!e.ctrlKey && !e.metaKey) { e.preventDefault(); e.stopPropagation(); // 在光标位置插入换行符 const start = messageInput.selectionStart; const end = messageInput.selectionEnd; messageInput.value = `${messageInput.value.substring(0, start)}\n${messageInput.value.substring(end)}`; messageInput.selectionStart = messageInput.selectionEnd = start + 1; } // 按住Ctrl/Cmd时,触发发送 else { // 模拟点击发送按钮或调用Weavy内部发送方法 const sendBtn = messageInput.closest('.wy-message-compose').querySelector('.wy-send-button'); sendBtn?.click(); } }); });
示例2:完全禁用回车发送,仅通过按钮发送
如果不需要换行,只想取消回车发送的默认行为:
weavy.on('ready', () => { const messageInput = weavy.root.querySelector('.wy-message-input'); if (messageInput) { messageInput.addEventListener('keydown', (e) => { if (e.key === 'Enter') { e.preventDefault(); e.stopPropagation(); } }); } });
注意事项
- 选择器适配:不同Weavy版本的DOM类名可能有差异,若上述选择器无效,打开浏览器开发者工具查看聊天输入框的实际类名或属性(比如
[data-weavy="message-input"])。 - Shadow DOM兼容:如果Weavy使用Shadow DOM包裹组件,需通过
weavy.root.shadowRoot来查询元素。 - 动态元素处理:若聊天输入框是动态生成的(比如切换聊天会话时重建),使用事件委托(监听根容器的事件)比直接绑定输入框更可靠。
内容的提问来源于stack exchange,提问作者Lauro César
相关产品推荐
相关产品推荐

