2012-11-21 196 views
0

我需要将ClickHandlers添加到许多复选框(> 4000),并且它的效果持续40秒。 如何添加处理程序到HTML类中的所有元素?将ClickHandler添加到html类

现在:

ChckBoxHandler cbh = new ChckBoxHandler(); 
SimpleCheckBox.wrap(DOM.getElementById("chbid" + ID)).addClickHandler(cbh); 

我想:

DOM.getElementsByClass("chkboxes").addClickHandler(cbh); 
+0

4000复选框在一个页面? – Ibu

+0

是的,它的数据分析 –

+0

我认为事件代表团将是一个更好的解决方案,这样你可以只附加一个事件处理程序父母 – Ibu

回答

1

我会采取一个简单的解决方案:

你为什么不添加一个单击处理程序父窗口部件(html的面板或任何面板使用的是?),并检查是否有点击。

无论何时点击完成,您都可以循环浏览您的复选框,并查看哪一个有检查状态。

+0

它是表格,我也有行的链接。如果我点击链接 - 处理程序将激活?这对我很不利 –

+0

@ Ibu解决方案的GWT版本几乎就像在这种情况下一样,您必须过滤以查看实际点击了哪些内容。 JQuery为你做了一些过滤,这在GWT中很容易实现 - 获取事件的目标,询问它是什么(“输入”与“a”)或其“类”或“名称”属性是 - 以某种方式区分它。 –

0

当你在你的页面(在你的案件4000)有很多的元素,这不是一个好主意,分配事件到他们每一个人。它会伤害到性能。相反,您可以使用事件代表团(包括点击情况下)将事件分配给父元素,并检查哪个子元素被点击并运行代码

这是一个非常好的教程它由jsfiddle.net的创建者David Walsh工作。

How JavaScript Event Delegation Works

如果你使用jQuery有一个很简单的方法是需要照顾的,对于你。

jQuery .live()

+0

想留在gwt,但如果没有其他解决方案 - 做到这一点,谢谢 –