كيفية الحصول على عناصر DOM وتغيير وظيفة onClick

أهلاً،

هل لديك فكرة عن كيفية الحصول على عناصر DOM في discourse دون الحاجة إلى استخدام setTimeout و querySelector؟
لأنني حاليًا أفعل شيئًا كهذا: -

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

إذا لم أستخدم المهلات المذكورة أعلاه، فأحيانًا أحصل على عناصر فارغة لأن DOM لم يتم تحميله بالكامل، حتى بعد وضع هذا داخل دالة window.onload.
لذا فإن هدفي هو الحصول على عناصر DOM وتغيير وظيفة onChange.

أي مساعدة في هذا ستكون رائعة.

شكراً :slight_smile:

Discourse هو تطبيق EmberJS كامل، لذلك لا يمكنك الاستعلام/التلاعب بالعناصر كما لو كان موقع ويب عادي تم عرضه على الخادم.

لتخصيص تطبيق الويب، يمكنك اتباع الإرشادات الموجودة في

دليل المطور لموضوعات Discourse

إعجاب واحد (1)

بالإضافة إلى النظر في دليل المطور، قد تتخذ خطوة إلى الوراء وتصف ما تحاول القيام به بدلاً من الحل المقترح الخاص بك.

إعجاب واحد (1)

مرحباً جاي،

كنت أحاول استدعاء وظائف التحليلات الخاصة بـ moEngage عند النقر على أزرار معينة في الصفحة (مثل: الإعجاب، التعليق، المشاركة)

لا يمكنني فعل ذلك إلا إذا كان لدي وصول إلى وظيفة onClick لهذه الأزرار. هل هناك أي إضافة في discourse من شأنها مساعدتي في تحقيق ذلك؟

شكراً

يجب أن تكون قادرًا على القيام بذلك في مكون سمة. أوصي بالبدء بأدلة المطور لمعرفة كيفية عمل الأشياء.