如何获取DOM元素并更改onClick功能

嘿,

您知道如何在不使用 setTimeout 和 querySelector 的情况下获取 discourse 上的 DOM 元素吗?
因为我现在是这样做的:-

setTimeout(() => {
                    var createTopicButton = document.querySelector("#create-topic");
                    if(createTopicButton)
                        createTopicButton.onclick = function (e) {
                        if (window.Moengage && window.Moengage.track_event) {
                            window.Moengage.track_event("Topic_Create_Clicked", {});
                        }
                        setTimeout(() => {
                            var topicCreate = document.querySelector("#reply-control .save-or-cancel .btn-primary")
                            topicCreate.onclick = function (e) {
                                let heading = document.querySelector('#reply-control #reply-title').value;
                                let category = document.querySelector('.select-kit-header-wrapper>.select-kit-selected-name>.name>.badge-wrapper>.badge-category>.category-name')?.innerText;
                                let desc = document.querySelector('.d-editor-textarea-column>.d-editor-textarea-wrapper>textarea').value;
                                let imagePresent = desc.includes("upload://");
                                if (window.Moengage && window.Moengage.track_event && heading && category && desc) {
                                    window.Moengage.track_event("Topic_Created", {"Category":category,"Topic Name":heading,"Topic Description":desc,"Is_image_present":imagePresent});
                                }

                            }
                        },[300])

                    };
                },[500])

如果我不使用上述超时,我有时会得到 null 元素,因为 DOM 尚未完全加载,即使将其放在 window.onload 函数中也是如此。
所以我的目标是获取 DOM 元素并更改 onChange 功能。

任何帮助都将不胜感激。

谢谢 :slight_smile:

Discourse 是一个完整的 EmberJS 应用程序,因此您无法像查询/操作服务器渲染的纯 HTML 网站那样进行操作。

为了自定义 Web 应用程序,您可以遵循以下指南:

Discourse 主题开发者指南

1 个赞

除了查看开发人员指南外,您还可以退一步描述您正在尝试做什么,而不是您建议的解决方案。

1 个赞

嘿 Jay,

我尝试在页面上的某些按钮(例如点赞、评论、分享)的 onClick 事件中调用 moEngage 分析函数。

只有当我能够访问这些按钮的 onClick 功能时,我才能做到这一点。Discourse 中是否有任何插件可以帮助我实现这一目标?

谢谢

您应该可以在主题组件中做到这一点。我建议您先阅读开发人员指南,了解工作原理。