0

struts1.3.8を使用しています。クライアント側とサーバー側の検証メッセージを生成するためにstrutsValidatorPlugInを使用しています。
これで、クライアント側のJavaScriptがバリデータープラグインによって生成されます。検証エラーがある場合は、アラートメッセージに表示されます。しかし、私はテキストフィールドのほかにそれらを表示したいと思います。
現在もアラートメッセージのみを処理しています。ただし、要件が変更されました。やってみましたがダメ…
どうやって?
これはプラグインによって生成されたコードです

   `ここにコードを入力`functionjcv_handleErrors(messages、focusField){
          if(focusField && focusField!= null){
              var doFocus = true;
              if(focusField.disabled || focusField.type =='hidden'){
                  doFocus = false;
              }
              if(doFocus &&
                  focusField.style &&
                  focusField.style.visibility &&
                  focusField.style.visibility =='非表示'){
                  doFocus = false;
              }
              if(doFocus){
                  focusField.focus();
              }
          }
          alert(messages.join('\ n'));
      }
4

1 に答える 1

2

具体的な情報がなければ、私が実際に提案できるのは、次のバリエーションだけです。

window.alert = function(message){
    console.log(message);
}

JS フィドルのデモ

これにより、渡されたすべてのメッセージがalert()、代わりにconsole.log().

代わりに、メッセージを特定の要素に向けることができます。

window.alert = function(message) {
    var output = document.getElementById('output'),
        newTextContainer = document.createElement('p'),
        text = document.createTextNode(message);
    newTextContainer.appendChild(text);
    output.appendChild(newTextContainer);
}

JS フィドルのデモ

ただし、これらのいずれかを使用するとalert()、ページでの関数の使用が中断されます。したがって、代わりに、後者の例 (すぐ上) を使用して新しい関数を作成し、その関数を上書きするのではなく呼び出すことをお勧めしますalert()

アラートを処理するカスタム関数の作成、および新しい「アラート」を追加する特定の要素の指定に関しては、次のようになります。

function newAlert(message, elem) {
    // message is a string containing the message to display.
    // elem is the id of the element into which the message should be displayed,
    // defaults to an id of 'output' if no element is specified.
    var output = elem ? document.getElementById(elem) : document.getElementById('output'),
        newTextContainer = document.createElement('p'),
        text = document.createTextNode(message);
    newTextContainer.appendChild(text);
    output.appendChild(newTextContainer);
}

JS フィドルのデモ


以下、OP からの質問に応じて編集されました。

次に、以前のエラー メッセージを上書きしたいフォームを再度送信します。同じメッセージを 2 回表示しない。

これらのエラー メッセージを追加するのではなく、最後のエラー メッセージのみを表示したい場合、これを行うにはいくつかの方法があります。最初の例では、whileループを使用しfirstChildoutput要素の を削除し、空の場合は新しいエラー メッセージを追加しています。

function newAlert(message, elem) {
    var output = elem ? document.getElementById(elem) : document.getElementById('output'),
        newTextContainer = document.createElement('p'),
        text = document.createTextNode(message);
    while (output.firstChild){
        output.removeChild(output.firstChild);
    }
    newTextContainer.appendChild(text);
    output.appendChild(newTextContainer);
}

JS フィドルのデモ

別の方法として、要素の最初の段落要素への参照を取得しoutput(存在する場合は作成し、存在しない場合は作成します)、その要素のテキストを単純に上書きします。

function newAlert(message, elem) {
    var output = elem ? document.getElementById(elem) : document.getElementById('output'),
        textContainer = output.getElementsByTagName('p')[0] || output.appendChild(document.createElement('p'));

    if (textContainer.firstChild){
        textContainer
            .firstChild
            .nodeValue == message;
    }
    else {
        textContainer
            .appendChild(document
                         .createTextNode(message));
    }
}
于 2012-07-05T11:11:59.813 に答える