Слушатели событий GWTquery не работают

Я пытаюсь добавить простой прослушиватель кликов к такому элементу:

$(".choice_span").bind(Event.ONMOUSEUP, new Function() {
                public boolean f(Event E) {
                Window.alert("foo");
                return true;
            }
        });

Но когда я нажимаю, ничего не происходит (все импорты в порядке, с этим проблем нет). Поэтому я думаю, что, возможно, мне следует дождаться загрузки всех элементов. Поэтому я изменил его на:

Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand () {
        public void execute () {
            $(".choice_span").bind(Event.ONMOUSEUP, new Function() {
                public boolean f(Event E) {
                Window.alert("foo");
                return true;
            }
        });
        }
    });

Но по-прежнему прослушиватель кликов не работает. Я думаю, что с GWTquery проблем нет, потому что если я заменю обработчик события чем-то вроде $(".choice_span").text("foo"), все такие интервалы изменят свой текст на foo при загрузке страницы. Может ли кто-нибудь сказать мне, что здесь не так?


person SexyBeast    schedule 20.01.2013    source источник


Ответы (1)


Вы должны убедиться, что элементы, на которые вы ориентируетесь, находятся в dom. Если вы играете с виджетом, вы можете передать виджет в качестве контекста вашего запроса.

$(".choice_span", myWidget).bind(...)

или выполните свой запрос, когда виджет прикрепляется:

myWidget.addAttachHandler(new Handler() {
            @Override
            public void onAttachOrDetach(AttachEvent event) {
                if (event.isAttached()) {
                   $(".choice_span").bind(Event.ONMOUSEUP, ...);
                } else {
                   $(".choice_span").bind(Event.ONMOUSEUP);
                }
            }
        });

И если вы хотите слушать по щелчку, я рекомендую вам использовать метод click().

person jdramaix    schedule 21.01.2013