Иногда необходимо программно сгенерировать событие на определенном элементе, например на ссылке, метке или кнопке. Вызовем событие клика на ссылке(firstAnchor) из другой ссылки(secondAnchor). Рассмотрим возможные способы как это сделать.
1-ый способ:
1-ый способ:
2-ой способ:
- firstAnchor.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- secondAnchor.fireEvent(new GwtEvent<ClickHandler>(){
- @Override
- public GwtEvent.Type<ClickHandler> getAssociatedType() {
- return ClickEvent.getType();
- }
- @Override
- protected void dispatch(ClickHandler handler) {
- handler.onClick(null);
- }
- });
- }
- });
* This source code was highlighted with Source Code Highlighter.
3) следующий способ работает, но это небольшой хак :) потому что com.google.gwt.event.dom.client.ClickEvent имеет protected конструктор.
- NativeEvent nativeClickEvent =
- Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false);
- DomEvent.fireNativeEvent(nativeClickEvent, secondAnchor);
- // or we can create ENTER keydown event
- NativeEvent nativeKeyDownEvent =
- Document.get().createKeyDownEvent(false, false, false, false, KeyCodes.KEY_ENTER);
- DomEvent.fireNativeEvent(nativeKeyDownEvent, secondAnchor);
* This source code was highlighted with Source Code Highlighter.
4) так как все браузеры реализуют метод click() на элементе, который генерирует событие нажатия на элементе, то можно воспользоваться вызовом через JSNI
- // it works but, it's a little bit hack
- secondAnchor.fireEvent(new ClickEvent(){});
* This source code was highlighted with Source Code Highlighter.
5) или можно скастовать элемент Element в ButtonElement или InputElement и вызвать метод click()
- click(secondAnchor.getElement());
- ...
- public static native void click(Element elem) /*-{
- elem.click();
- }-*/;
* This source code was highlighted with Source Code Highlighter.
secondAnchor.getElement().<ButtonElement>cast().click();
* This source code was highlighted with Source Code Highlighter.
спасибо, очень помогло
ОтветитьУдалить