将多个警报转换为一个警报

时间:2014-08-15 02:01:07

标签: javascript

我使用javascipt验证表单,代码如下所示,

function validateForm() {
        console.log("start check form");
        var errors = [];
        var form = document.getElementsByTagName('form')[0];

        /* 
        * Store appropriate form elements.
        * There are many ways to do this, but I'm keeping it 
        * simple for the example
        */
        var fnElem = document.getElementById("name");
        var lnElem = document.getElementById("phone");
        var firstName = fnElem.value;
        var lastName = lnElem.value;
        // etc...

        // validate required fields
        if (firstName === "") {
            errors.push({
            elem: firstName,
            message: "name can't be blank"
            });
        }

        if (lastName === "") {
            errors.push({
            elem: lastName,
            message: "phone can't be blank"
            });
        }

        for(var i=0; i<errors.length;i++){
            alert(errors[i].message);
        }
        return false;   
    }

并且在for循环中它会在窗口中发出很多次警报。 如何将所有警报合并到一条消息中......并且只提醒一次。

我知道我可以定义一个字符串并逐个追加,但这看起来很愚蠢。 有没有更好的方法来做到这一点。

3 个答案:

答案 0 :(得分:1)

首先,将错误数组映射到包含的消息:array.map()。 然后您可以加入消息:array.join()

if (errors.length) {
  alert("Errors:\n" + errors.map(function (e) { return e.message; }).join('\n'));
}

答案 1 :(得分:1)

更改循环以将消息附加到变量,然后在循环后发出警报:

var messages = "";
for(var i=0; i<errors.length;i++){
    messages += errors[i].message + "\n";
}
alert(messages)

答案 2 :(得分:0)

for( var sAlert = '', i = 0, iL = errors.length; i < iL; ++i ) {
    sAlert += errors[i].message + '\n';
}
alert(sAlert );

我没有仔细查看你的代码,但如果一切都很好,这应该解决它:)