在屏幕上显示javascript验证消息而不是警告消息?

时间:2012-07-05 10:58:21

标签: javascript struts struts-1

我正在使用struts1.3.8。我正在使用struts ValidatorPlugIn来生成客户端和服务器端验证消息 现在客户端javascript由验证器插件生成。如果有任何验证错误,它将显示在警报消息中。但我想在文本字段旁边显示它们 我现在仍在使用警报消息..但现在需求已经改变。我试过但没用... ... 怎么做?
这是插件生成的代码

   `enter code here` function jcv_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 == 'hidden') {
                  doFocus = false;
              }
              if (doFocus) {
                  focusField.focus();
              }
          }
          alert(messages.join('\n'));
      }

1 个答案:

答案 0 :(得分:2)

如果没有具体信息,我真正建议的是以下内容的变体:

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

JS Fiddle demo

这样可以确保传递给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 Fiddle demo

但是,使用其中任何一个都会破坏页面中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 Fiddle demo


已编辑以回应OP中的问题,如下:

  

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

有两种方法可以做到这一点,假设您只想显示最后的错误消息,而不是附加这些错误消息;在第一个示例中,我使用while循环删除firstChild元素的output,当为空时,附加新的错误消息:

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 Fiddle demo

另一种方法是获取对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));
    }
}