2012-11-19 3 views
0

GWT에 테이블을 만들고 열이 입력을 가진 셀을 포함합니다. 입력 내용의 텍스트가 바뀌면 정보를 얻고 싶습니다. 내 셀에는 render()onBrowserEvent() 메서드가 오버로드됩니다. 여기 코드는 다음과 같습니다GWT의 브라우저 이벤트를 "변경"

public HourPickerCell() { 
    super("change", "keyup"); 
} 

@Override 
public void render(Context context, String value, SafeHtmlBuilder sb) { 
    if (value == null) { 
     return; 
    } 
    sb.appendHtmlConstant("<input class=\"hourPicker\" type=\"text\" value=\"" + value + "\"></input>");   
} 


@Override 
public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { 
    System.out.println(event.getType()); 
    super.onBrowserEvent(context, parent, value, event, valueUpdater); 

    if (event.getType().equals("change")) { 
     EventTarget eventTarget = event.getEventTarget(); 
     if (!Element.is(eventTarget)) { 
      return; 
     } 
     if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) { 
      InputElement input = (InputElement) parent.getFirstChild(); 
      valueUpdater.update(input.getValue()); 
     } 
    }  
} 

당신은 내가 change 이벤트를 잡으려고 볼 수 있듯이. 파이어 폭스와 크롬 모두 괜찮습니다. 나는 다른 셀에 입력 뭔가 및 탭을 쓸 때 나는 콘솔에서 다음과 같은 결과를 얻을 : 이벤트의

keyup keyup keyup keyup keyup keyup keyup change keyup

하나는 '변화'- 이것은 내가 필요로하는 것입니다. Unfortunatelly 인터넷 익스플로러에 난 단지가 나타납니다 변화 이벤트가 없습니다

keyup keyup keyup keyup keyup keyup keyup

. 아무도 문제가있는 곳을 말해 줄 수 있습니까? 그것을 고칠 방법이 있습니까?

답변

0

Internet Explorer에서 change 이벤트는 거품이 나지 않으므로 [1], input 요소에서 이벤트를 바로 청취해야합니다. 다른 브라우저는 모두 change 이벤트가 [2] 거품을 일으키는 HTML5 동작을 구현합니다.

나는 정확한 수정을 알지 못하지만 이미 모든 노력을 다 해 놓은 TextInputCell에서 복사하거나 복사하는 것이 더 좋습니다.

[1] http://msdn.microsoft.com/en-us/library/ie/ms536912(v=vs.85).aspx 보조 노트로
[2] http://dev.w3.org/html5/spec/common-input-element-apis.html#event-input-change


, 당신의 render 방법 (value는 견적에 포함 된 내용을 경우?) 당신은 아마 SafeHtmlUtils를 사용하려면 또는 줄 안전하지 않다 a SafeHtmlTemplates (코드 TextInputCell 참조)

+0

'TextInputCell'을 사용하면 Internet Explorer에서'keyup' 및'keydown' 이벤트 만받습니다. 파이어 폭스와 크롬에서는 여전히 모든 것이 괜찮습니다. 나는 내 솔루션이 안전하지 않다는 것을 안다 - 나는 그것을 바꿀 것이다 : – mchrobok

+0

'AbstractInputCell'도'blur'를 다룰 것이고,'change'는 blur에 대해 해고되기 때문에 ... –

+0

크롬과 파이어 폭스에서 나는 그렇다. 모든 이벤트 -'keydown','keyup','change','blur','focus'. 그러나 IE는 여전히'keyup'과'keydown' 이벤트 만 생성합니다. – mchrobok