我有一个带有两个提交按钮和一些代码的表单:
HTML:
<input type="submit" name="save" value="Save" />
<input type="submit" name="saveAndAdd" value="Save and add another" />
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
form.onSubmit = function(evnt) {
// Do some asyncrhnous stuff, that will later on submit the form
return false;
}
Run Code Online (Sandbox Code Playgroud)
当然,这两个提交按钮可以完成不同的事情.有没有办法找出onSubmit按下哪个按钮,所以稍后我可以提交thatButton.click()?
理想情况下,我不想修改按钮的代码,只是有一个具有此行为的纯javascript插件.
我知道FF有,evnt.explicitOriginalTarget但我找不到其他浏览器的东西.
在这里使用必须在iPad上运行的webapp(因此,Safari Mobile).
我有这个代码,除了iPad之外几乎可以正常工作:
<select class="gwt-ListBox" size="12" multiple="multiple">
<option value="Bleeding Eyelashes">Bleeding Eyelashes</option>
<option value="Smelly Pupils">Smelly Pupils</option>
<option value="Bushy Eyebrows">Bushy Eyebrows</option>
<option value="Green Vessels">Green Vessels</option>
<option value="Sucky Noses">Sucky Noses</option>
</select>
Run Code Online (Sandbox Code Playgroud)
它看起来像是一个有12行的盒子,其中5个被填满.它在FF,IE,Chrome,Safari Win中运行良好.但是,当我在iPad上打开它时,它只是一条线!
使用CSS设置样式不起作用.如果设置高度,它只会使单线更大.有没有办法让它的行为与普通浏览器相同,或者我是否需要制作自定义组件?
谢谢.
我在抽象的java类中有以下代码:
protected abstract <E extends HasText & IsWidget> E createNewDisplayWidget();
Run Code Online (Sandbox Code Playgroud)
编译好.但是,如果我在任何地方调用它,编译器会抱怨:
Bound mismatch: The generic method createNewDisplayWidget() of type DemoClass is not applicable for the arguments (). The inferred type HasText is not a valid substitute for the bounded parameter <E extends HasText & IsWidget>
Run Code Online (Sandbox Code Playgroud)
有没有办法要求抽象方法返回应该实现多个接口的东西?
注意:不,我无法创建一个实现我喜欢的两个特殊界面.GWT有像Label这样的小部件已经实现了所谓的接口,我想使用这个小部件.
编辑:我从这里想到了这个想法(第22页):
我不知道为什么我在网上找不到这个答案.
我有实现多个方法的类,我想编写方法来期望它们.我不知道怎么做,或者甚至可能.
例如:
public void yellAtPet(<? extends Pet implements YellableAt> arg) {
arg.yellAt("Don't go there!");
arg.pet("Good Boy");
}
Run Code Online (Sandbox Code Playgroud) PopupPanel是GWT写的(akhem)很久以前的一个类(这就是为什么它太糟糕了),允许弹出内容的弹出窗口.其中一个选项是autoHide,如果在弹出窗口之外有某个事件,它会关闭弹出窗口.除了Safari Mobil(SM)之外,它适用于任何事情.原因是SM不触发点击事件.它会触发触摸事件.PopupPanel被硬编码以查找ClickEvents.
具体来说,代码说:
case Event.ONMOUSEDOWN:
...
if (!eventTargetsPopupOrPartner && autoHide) {
hide(true);
...
Run Code Online (Sandbox Code Playgroud)
显然这不完整,它还应该包括Event.ONTOUCHSTART
问题是,所有方法和字段都是私有的,所以我无法添加此功能.这是GWT团队的一个大嘘声,但并不是真正的关注,因为我可以创建自己的类并复制PopupPanel的内容.最大的问题是nativeEventPreview没有捕获Touch事件!
我尝试将以下内容添加到事件预览中:
private static NativePreviewHandler nativePreviewHandler = new NativePreviewHandler() {
public void onPreviewNativeEvent(NativePreviewEvent event) {
Event nativeEvent = Event.as(event.getNativeEvent());
switch (nativeEvent.getTypeInt()) {
case Event.ONTOUCHSTART:
case Event.ONMOUSEDOWN:
EventTarget target = nativeEvent.getEventTarget();
if (!Element.is(target) || !popup.getElement().isOrHasChild(Element.as(target))) {
popup.hide();
} break;
}
}
};
Run Code Online (Sandbox Code Playgroud)
'弹出窗口'是PopupPanel,我试图关闭外部触摸事件.令人遗憾的是,在地球上的任何其他浏览器中进行测试时,它可以用于鼠标按下,但不适用于iPad.
我尝试的另一件事是在PopupPanel的玻璃上添加一个TouchStartHandler(它背后的灰色外观).我希望我可以通过这种方式捕捉触摸事件,但我无法在玻璃上触发事件,因为它以某种有趣的方式附加到DOM.我的代码:
private static class ProperPopupPanel extends PopupPanel {
public ProperPopupPanel() {
super();
}
void setHideOnGlassTouch() {
setGlassEnabled(true);
TouchableLabeThatDoesntCrashOnWrap glass = new TouchableLabeThatDoesntCrashOnWrap(getGlassElement());
glass.addTouchStartHandler(new TouchStartHandler() …Run Code Online (Sandbox Code Playgroud)