2017-12-13 9 views
0

私のxpagesアプリケーションでフィールドに入力された文字の量(xp:inputText)に応じて、送信ボタン(または無効なプロパティ) 。xpages - 部分リフレッシュ - 入力した文字数に基づいてボタンを非表示

部分リフレッシュhttps://openntf.org/XSnippets.nsf/snippet.xsp?id=standby-dialog-custom-controlのxsnippetを実装しましたが、各キーイベントがリフレッシュダイアログに表示される入力テキストコントロールの値の長さを計算するとします。

どうすればこの問題を回避できますか?一時的にスタンバイダイアログが表示されないようにすることができますか、またはJavaScriptを使用してクライアントサイドで行う必要がありますか?

+0

x文字以上入力できないクライアントサイドスクリプトを追加します。ユーザーへのメッセージやリロードは必要ありません。最大文字に達すると入力を防ぐだけです。 –

答えて

1

あなたは本当にあなたが誰もハックしないことを確実にしたい場合は、クライアント・サーバ往復(例えばを使用して各キーイベントにご入力テキストコントロールの値の長さを計算する必要がある場合あなたのクライアント側JS)、そしてあなたがforementioned XSnippetを使用して、スタンバイダイアログがすべてのキーを押して上に表示したくないと仮定すると、ここにあなたが一般的に何をする必要があるか:

  • をあなたがを行うときでは、最後の関数パラメータとしてoptionsオブジェクトを渡すことができます。ただ、(あなたはすでにそれに何かを入れている場合)このオブジェクトに1つのより多くのプロパティを追加したり、単一のプロパティを持つ新しいオブジェクトを作成し、それがこのoptionsオブジェクトはずっと受け継がれ

    XSP.partialRefreshPost('#{id:yourId}', {dontShowDialog: true}) 
    
  • のようなものでなければなりません行番号39、partialrefresh-startイベントが公開され、そのオブジェクトが最後の要素として公開されます。
  • 行#137は、このイベントをサブスクライブします。ちょっとあなたのoptionsに基づいて条件文でダイアログを作成する2次の行を折り返す今あなたは、関数の体内でのごoptions

  • を読み取ることができます

    dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options) 
    

    のように、それが宣言する関数に1つの以上のパラメータを追加します。パラメータ。全体のものは次のようになります。

    dojo.subscribe('partialrefresh-start', null, function(method, form, refreshId, options) { 
        if (options) { 
         if (options.dontShowDialog) return; 
        } 
        StandbyDialog_Do = true; 
        StandbyDialog_Started(); 
    }); 
    

すべてのあなたは、クライアント側のイベントハンドラ(falseに設定submit性質を持つものを使用する場合場合である上に書いたあなたは、サーバー側のハンドラを使用している場合。 。_partialRefresh方法、CSJSを呼び出す前に

  • :あなたが最後に呼び出され_partialRefresh方法に任意の追加のカスタムプロパティを渡すことはできませんので、物事は、少し複雑になっているしかし、私はこれを処理するための一つの方法を考えることができますエンジンがいくつか作るそのうちの1つは、ページ上のいくつかの非表示の入力フィールドに特定の値を設定しています。ここではハイジャッカーXSnippetの$$xspsubmitid' field, which is given the value of your declared event handler client id. Then you can read the value of $$ xxpsubmitid`フィールドに興味があり、イベントハンドラのIDが含まれている場合 - スタンバイダイアログを表示しません。この方法ははるかに柔軟ではありませんが、動作するはずです

P.S.上記のすべてを自分で試したことはありませんが、試して失敗するつもりなら、調査して修正してうれしいです。

0

これはクライアントスクリプトを使用して行うことができます。常にデータを提出する必要はありません。

XSP.getElementById('id').hidden=true;

関連する問題