2011-12-03 19 views
-3

我在GWT項目中有一個自定義控件(OrderItem)。這個小部件有一個TextBox。我將它的id設置爲「Navid」。但是如果我在面板中創建OrderItem的多個實例會怎麼樣?這個id會被重複。這使得html無效。GWT控件ID和HTML標準

如何爲TextBox指定一個唯一的ID?

回答

6

那麼,通常,GWT窗口小部件會生成自己的ID,這些ID將自動變爲唯一的,您通常不會擔心ID是什麼。當你說你正在設置TextBox的ID時,我假設你正在調用類似myTextBox.getElement().setId("Navid")的東西。

根據您的使用情況,我可以想到兩種簡單的方法。 HTMLPanel類有一個靜態的createUniqueId()方法,您可以單獨使用它或輕鬆創建唯一的ID。像myTextBox.getElemement().setId("Navid-" + HTMLPanel.createUniqueId())。唯一的問題是,生成的ID不是確定性的。

另一種常見的方法是根據父窗口小部件的ID生成ID。 myTextBox.getElement().setId("Navid-" + myTextBox.getParent().getElement().getId())

但是,我要在這裏進行猜測,並假設您想將自己的自定義ID分配給此小部件的原因是,您可以從GWT代碼之外的地方,從Javascript例如,來自JQuery。在這種情況下,我建議不要爲它指定一個ID,而必須是唯一有用的ID,而是將一個html類名稱分配給該小部件的元素。然後,您可以根據id或OrderItem的id或class的類來尋址widget的元素。您可以像示例中那樣向元素添加html類名稱myTextBox.getElement().addStyleName("navid")

因此,假設您將OrderItemWidget的html類分配給OrderItem小部件的根HTML元素和navid到TextBox的html類,你可以通過選擇器引用JQuery中的文本框".orderItemWidget .navid"

2

這就是爲什麼GWT使得它不能很容易地在小部件上設置ID。對於樣式,它使得使用CSS類名變得更容易。實際上,使用ID開始的原因很少,幾乎沒有動態生成的東西(比如小部件)。

現在,爲了回答你的問題,瀏覽器容忍的幾個要素共享相同ID的情況下,和getElementByIdis defined返回第一個這些元素(文檔順序)