0

我正在使用struts1.3.8。我正在使用 struts ValidatorPlugIn 来生成客户端和服务器端验证消息。
现在客户端 javascript 由验证器插件生成。如果有任何验证错误,它会显示在警报消息中。但我想在文本字段之外显示它们。
我现在仍然只处理警报消息。但现在要求改变了。我试过了,但没用……
怎么办?
这是插件生成的代码

   `在此处输入代码` function jcv_handleErrors(messages, focusField) {
          if (focusField && focusField != null) {
              var doFocus = true;
              if (focusField.disabled || focusField.type == 'hidden') {
                  焦点=假;
              }
              如果 (doFocus &&
                  focusField.style &&
                  focusField.style.visibility &&
                  focusField.style.visibility == '隐藏') {
                  焦点=假;
              }
              如果(焦点){
                  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()页面中函数的任何使用。所以我建议,相反,用后一个例子(就在上面)创建一个新函数并调用该函数,而不是 over-writing 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 的问题进行了编辑,如下:

接下来再次提交表单我要覆盖之前的错误信息。不是两次显示相同的消息。

有几种方法可以做到这一点,假设您只想显示最后一条错误消息,而不是附加这些错误消息;在第一个示例中,我使用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 回答