GWT超链接getHTML不支持点击事件

时间:2009-12-28 07:30:28

标签: gwt

在我的GWT项目中,我们正在改进设计,我遇到了一个问题。

我的网站标题,我们有一个登录链接,介于文本之间,如“已经是注册会员 - 登录 - Bla bla bla”。

我正在使用新的超链接(“登录”,“”).getHTML()替换“登录”文本。

我收到了链接,但点击事件无效。

如果我在面板中添加超链接(如horizo​​ntalPanel.add(new Hyperlink(“Login”,“”)),则点击事件正常。

如何解决这个问题。


我尝试在调用getHTML()之前和之后设置clicklisner并且它不起作用

3 个答案:

答案 0 :(得分:4)

Hyperlink.getHTML()返回的字符串不是GWT小部件,因此它没有点击处理程序或与之关联的任何特殊小部件功能。它只是一个字符串。这就是为什么当您将超链接小部件直接添加到Panel时它可以工作,如下所示:

horizontalPanel.add(new Label("Already a registered member - "));
horizontalPanel.add(new Hyperlink("Login", ""));
horizontalPanel.add(new Label(" - Bla bla bla"));

如果您喜欢使用小部件而不是它们的String / HTML表示,那么它们的事件将正常工作。

P.S:如果你想要一个HTML超链接而不与GWT的历史系统交互,你可以使用一个Anchor。假设您的页面中已有此HTML:

<p>
  Already a registered member -
  <a id="loginLink" href="javascript:void(0);">Login</a>
  - Bla bla bla
</p>

然后,您可以使用Anchor小部件包装现有的HTML超链接,并为其添加单击处理程序。

Anchor a = Anchor.wrap(DOM.getElementById("loginLink"));
a.addClickHandler( ... );

答案 1 :(得分:1)

我建议您只创建两个小部件,一个持有登录链接,另一个持有文本。根据情况切换可见标志,您将遇到更少的问题和更简单的解决方案。

类似的东西:

loginLink = new Hyperlink("login");
loginLink.addClickHandler(handler);

label = new Label("Already a registered member - ");

horizontalPanel.add(label);
horizontalPanel.add(loginLink);
horizontalPanel.add(new Label(" - Bla bla bla"));

label.setVisible(isLoggedIn());
loginLink.setVisible(!isLoggedIn());

答案 2 :(得分:0)

您是否在使用getHTML()替换之前将点击处理程序添加到超链接?如果是这样,我猜想点击处理程序的代码不包含在正在设置的HTML中。