0

テーブルセルにリンクがあります。ユーザーがリンクにカーソルを合わせると、非同期RPC呼び出しが行われ、ホバーテキスト(タイトル属性)が更新されます。ユーザーが要素にカーソルを合わせている間にホバーテキストが変更されると、非常に一貫性のない結果が表示されます。一部のマシンでは正常に動作しますが、他のマシンではまったく動作しません。

結果をキャッシュするため、ユーザーがもう一度ホバーをトリガーすると、ツールチップのテキストが正しく表示されます。

ユーザーがアンカーにカーソルを合わせている間にアンカーのタイトル属性を更新するトリックはありますか?

RPC呼び出しが正常に戻ると、呼び出します

link.setTitle(text);

これは

/**
   * Sets the title associated with this object. The title is the 'tool-tip'
   * displayed to users when they hover over the object.
   * 
   * @param title the object's new title
   */
  public void setTitle(String title) {
    if (title == null || title.length() == 0) {
      DOM.removeElementAttribute(getElement(), "title");
    } else {
      DOM.setElementAttribute(getElement(), "title", title);
    }
  }
4

2 に答える 2

1

ここにあるあなたのコードは、問題について多くを語っていません。setTitle間違いなく問題なく動作します。ただし、ここで直面している問題は、非同期呼び出しが完了するまでに時間がかかるため、純粋に発生しているように見えるため、マウスホバーで非同期呼び出しを起動することはあまり望ましくありません。

ページの読み込み中に、マウスオーバーで表示する必要のあるデータをプリフェッチし、非同期呼び出しではなくそのテキストを直接設定することを強くお勧めします。

于 2012-12-27T12:42:14.303 に答える
0

ユーザーがマウスをリンク上に移動すると、ブラウザーはtitle属性をツールチップとして表示します。あなたの場合、タイトルが設定されていない場合、ツールチップはまったくありません。RPC呼び出しが戻ってタイトルを設定すると、ユーザーがマウスをリンクから離してからリンクに戻るまで、ブラウザーには何も起こりません。そのため、一部のツールチップは表示されず、他のツールチップ(前のマウスオーバーですでに設定されている)が表示されます。このUIパターンは、ユーザーを本当に混乱させます。

あなたはあなたのデザインを再考しなければならないかもしれません。より良いアプローチは、リンクの横に小さなポップアップパネルを表示することです。このパネルの表示と非表示を完全に制御できます。ポップアップパネルを作成します。リンクにMouseOverHandlerを追加します。MouseOverEventが発生したら、RPC呼び出しをディスパッチします。呼び出しが戻ったら、ポップアップパネルにデータを入力し、リンクの横に表示します。ユーザーが離れるときは、ポップアップパネルを非表示にします。

テーブルに多数のリンクがある場合は、明らかに最適化できます。テーブルに単一のMouseOverHandlerを使用してから、どの要素がイベントのソースであるかを確認できます。

于 2012-12-27T13:02:56.523 に答える