0

我正在尝试向这样的元素添加一个简单的单击侦听器:

$(".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 。谁能告诉我这里可能有什么问题?

4

1 回答 1

2

您必须确保您定位的元素在 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() 方法。

于 2013-01-21T08:47:45.063 回答