Comment obtenir des éléments DOM et modifier la fonctionnalité onClick

Salut,

Avez-vous une idée de la façon dont je peux obtenir des éléments DOM sur Discourse sans avoir à utiliser un setTimeout et un querySelector.
Car actuellement, je fais quelque chose comme ceci : -

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])

Si je n’utilise pas les timeouts ci-dessus, j’obtiens parfois des éléments nuls car le DOM n’est pas entièrement chargé, même après avoir placé cela dans une fonction window.onload.
Mon objectif est donc d’obtenir des éléments DOM et de modifier la fonctionnalité onChange.

Toute aide serait la bienvenue.

Merci :slight_smile:

Discourse est une application EmberJS complète, vous ne pouvez donc pas interroger/manipuler des éléments comme s’il s’agissait d’un site Web HTML simple rendu côté serveur.

Pour personnaliser l’application Web, vous pouvez suivre les directives de

Guide du développeur pour les thèmes Discourse

1 « J'aime »

En plus de consulter le guide du développeur, vous pourriez prendre du recul et décrire ce que vous essayez de faire plutôt que votre solution suggérée.

1 « J'aime »

Salut Jay,

J’essayais d’appeler les fonctions analytiques de moEngage lors du clic sur certains boutons de la page (par exemple : like, comment, share).

Je ne peux le faire que si j’ai accès à la fonctionnalité onClick de ces boutons. Existe-t-il un plugin dans Discourse qui pourrait m’aider à y parvenir ?

Merci.

Vous devriez pouvoir faire cela dans un composant de thème. Je vous recommande de commencer par les guides du développeur pour voir comment les choses fonctionnent.