1

フォームがあり、ユーザーが戻るボタンを押したときに確認ダイアログボックスを表示したい。ChangeValueHandlerをリッスンするTexbonxが1つあるとします。

addValueChangeHandler(new ValueChangeHandler<String>() {    
    @Override
    public void onValueChange(ValueChangeEvent<String> event) {
        setChanged(true);
    }
}); 

これは短いシナリオです

1)テキストボックスにテキストを入力します

2)戻るボタンを押す

3)ValueChangeEventは呼び出されません

BlurEventTextBoxでプログラムで起動を試みましたtextBox.fireEvent(new BlurEvent() { });が、それでも結果は得られませんでした。

助言がありますか ?

4

2 に答える 2

1

ページが閉じられると(戻るボタンを押すか、ページを閉じることによって)、コントロールによってイベントが発生することはありません。最初window.onbeforeunloadに起動するのは、データの損失についてユーザーに警告し、ページにとどまるように提案する機会を与えることです。ユーザーがページに留まることを選択した場合、発生するはずだったすべてのイベントが発生します(したがって、変更イベントが発生します)。

onbeforeunloadを使用して、ハンドラーをネイティブイベントにアタッチできますWindow.addClosingHandler

Window.addWindowClosingHandler(new ClosingHandler() {

        @Override
        public void onWindowClosing( ClosingEvent event )
        {
            event.setMessage("If you leave the page now all data will be lost.");
        }

});

とそのClosingEvent根底にあるonbeforeunloadイベントは、いかなる状況においても、プログラムでキャンセルすることはできません。ユーザーがページを離れないようにする唯一の方法は、ユーザー自身が上記のコードの結果であるポップアップで「このページにとどまる」を選択した場合です。

于 2012-07-24T00:13:14.220 に答える
0

私がしたことは、TextBoxのフォーカスをFalseに設定し、それが変更されているかどうかを確認することです。これにより、戻るボタンを押したときにTextBoxのフォーカスが強制的に解除されます。

フォームが変更されたかどうかをチェックするコードです

public boolean isChanged(){
    if(formPanel == null) return false;     
    for (int i = 0; i < formPanel.getWidgetCount(); i++) {
        if(formPanel.getWidget(i) instanceof BaseWidget){
            BaseWidget w= (BaseWidget) formPanel.getWidget(i);
            w.setFocus(false);
            if(w.isChanged()){
                return true;
            }
        }
    }
    return false;
}
于 2012-07-29T20:59:46.903 に答える