如果没有具体信息,我真正能建议的只是以下内容的变体:
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
循环来删除元素的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 小提琴演示。
另一种方法是获取对元素中第一个段落元素的引用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));
}
}