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

问题描述:

我正在使用struts1.3.8。我使用struts ValidatorPlugIn来生成客户端和服务器端验证消息。
现在,客户端JavaScript由验证器插件生成。如果有任何验证错误,它将显示在警报消息中。但我想在文本字段之外显示它们。
我现在还在使用警报消息。但现在需求已更改。我试过但没用...
怎么办?
这是插件在屏幕上显示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')); 
     }
+0

,你能否告诉我们处理警报的代码的一部分? – 2012-07-05 11:02:48

没有具体的信息,所有我真的可以认为是以下的变化而产生的代码:

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循环以除去output元件的firstChild,并且当空,追加新的错误消息:

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)); 
    } 
} 
+0

非常感谢大卫......它像任何事情一样工作......我得到了我期待的...... – 2012-07-05 11:35:05

+0

非常受欢迎;我很高兴得到了帮助! =) – 2012-07-05 11:35:58

+0

嗨大卫,我们可以覆盖错误信息? – 2012-07-05 12:28:19