我正在使用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')); }
答案 0 :(得分:2)
如果没有具体信息,我真正建议的是以下内容的变体:
window.alert = function(message){
console.log(message);
}
这样可以确保传递给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);
}
但是,使用其中任何一个都会破坏页面中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);
}
已编辑以回应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);
}
另一种方法是获取对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));
}
}