إضافة ClickHandler إلى Div الذي يحتوي على العديد من القطعة الأخرى

StackOverflow https://stackoverflow.com/questions/4303320

  •  29-09-2019
  •  | 
  •  

سؤال

يبدو أن اللوحة لا ترث من HasclickHandlers ولا يمكنني إضافة ClickHandler إلى الإلغاء. هل هناك أي طريقة لإضافة ClickHandler إلى Div؟

تحرير: السبب في أنني لا أستطيع استخدام التسمية لأن Div أريد أن أكون قابلاً للنقر يحتوي على Div آخر.

هل كانت مفيدة؟

المحلول

بشكل افتراضي ، لا يغرق اللوحة في حدث OnClick. وهذا يعني أن النقر على لوحات لا يؤدي في الواقع إلى "clickevent" وبالتالي لم يتم إطلاق المعالج. لاستخدام انقر فوق أحداث مع لوحة (أو لهذه المسألة أي عنصر واجهة مستخدم أخرى) ، يجب عليك أولاً استدعاء Sinkevents () عليها مع بتات الحدث المناسبة.

فمثلا:

SimplePanel p = new SimplePanel();
    p.sinkEvents(Event.ONCLICK);
    p.setTitle("Click me");
    p.setSize("600px", "600px");
    p.addHandler(new ClickHandler(){

        @Override
        public void onClick(ClickEvent event) {

            Window.alert("SimplePanel clicked!");

        }

    }, ClickEvent.getType());

قطعة رمز أعلاه أولاً "تمكين" أحداث النقر لاستخدام SimplePanel p.sinkEvents(Event.ONCLICK); ثم يستمر لإضافة نقرات قياسية عليه. لاحظ أنه على الرغم من أن Simplepanel لا تنفذ hasclickhandlers ، يمكنك دائمًا إضافة معالج باستخدام addHandler() طريقة.

نصائح أخرى

استخدم ال FocusPanel.

لوحة بسيطة تجعل محتوياتها قابلة للتركيز ، وتضيف القدرة على التقاط أحداث الماوس ولوحة المفاتيح.

public class ClickableDiv extends FlowPanel implements HasClickHandlers {
    @Override
    public HandlerRegistration addClickHandler(ClickHandler handler) {
        return addDomHandler(handler, ClickEvent.getType());
    }
}

يجب أن يكون كل ما تحتاجه. addDomHandler سوف يعتني بـ "غرق" نوع الحدث بالنسبة لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top