显示验证消息

本文关键字:消息 验证 显示 | 更新日期: 2023-09-27 17:52:16

我正在努力在我的网页上显示验证消息。我有一个javascript函数,它做客户端验证,并突出显示无效值的字段。除了突出显示字段,我想在我的网页上显示一条消息,我不知道怎么做。

这是我的javascript函数:

$(function () {
    $("#Save").click(Validate);
});
function Validate() {
var invalidValues = [];
var validValues = [];
var Code = $("#Code").val();
var Description = $("#Description").val();
var Status = $("#Status ").val();    
var requiredFields = { '#Code' : Code,
                         '#Description' : Description,
                         '#Status ' : Status };
    $.each(requiredFields, function (key, value) {
        if (value.length == 0) {
            invalidValues.push(key);
        }
        else { validValues.push(key); }
    });
        var invalidFields = invalidValues.toString();
        var validFields = validValues.toString();
    if (invalidValues.length > 0){
        $(invalidFields).addClass("highlighted");
        $(validFields).removeClass("highlighted");      
        return false;
    }
    $(validFields).removeClass("highlighted");
}
这是我的网页:
<div>
    <table>
    <tr>
        <th>
            Code
        </th>
        <td>
           <input maxlength="4" id="Code" type="text"/>
        </td>
    </tr>
        <tr>
        <th>
            Description
        </th>
        <td>
            <input id="Description" type="text"/>
        </td>
    </tr>
        <tr>
        <th>
            Status
        </th>
        <td>
            <input id="Status" type="text"/>
        </td>
    </tr>    
    <tr>  
        <th>
    </th>      
        <td>
            <button id="Save" type="button">Save</button>
        </td>        
    </tr>
    </table>
</div>

我想在我的网页底部显示一条消息,说"请输入有效值:代码"。我存储无效的值在变量"invalidValues"在我的js函数"验证"我怎么能访问这些值在我的网页?

我也有一些关于什么是做验证的最佳方式的问题?客户端vs服务器端?此外,它是更好地显示弹出验证消息或突出显示嵌入在网页上的消息?

显示验证消息

我对MVC不够熟悉,无法回答如何使用内置验证(如普通的ASP)。. Net有),假设MVC一开始就有。

下面的代码应该验证您的表单中的必填项,并在页面上为您的用户抛出一条消息:
$(function () {
    var Validate = function Validate(e) {
        var allFieldsValid = false, // boolean flag to cache result
            invalidFields = [],     // array for selectors
            validFields = [],       // array for selectors
            requiredFields = [      // array of selectors to validate against
                "#Code",
                "#Description",
                "#Status"
            ],
            message = $('<span />').addClass('validation-message').text('* This is a required field.');
        $(requiredFields.join(', ')).each(function (i, elem) {
            //requiredFields.join(', ') should return "#Code, #Description, #Status"
            var field = $(elem)
                value = field.val();
            if (value.length === 0) {
                invalidFields.push(field.selector);
            } else {
                validFields.push(field.selector);
            }
        });
        allFieldsValid = invalidFields.length === 0;            // if there are no invalid fields, all fields must be valid
        $('span.validation-message').remove();                  // remove any previous validation messages
        $(validFields.join(', ')).removeClass("highlighted");   // remove class from all valid fields
        // add class to all invalid fields and append message
        $(invalidFields.join(', ')).addClass("highlighted").append(message.clone());
        if (!allFieldsValid) {
            e.preventDefault(); // invalid fields, prevent event from bubbling
        }
        return allFieldsValid;  // return result
    };
    $("#Save").click(Validate);
});

至于你对验证的其他问题:

  1. 进行验证的最佳方式是什么?客户端vs服务器端?
  2. 也,它是更好地显示弹出验证消息或突出显示嵌入在网页上的消息?

:

  1. 没有vs 。要么是服务器端,要么是客户端和服务器端都有。这是因为您不能依赖于用户启用JavaScript,因此您不能依赖于客户端来运行。可以把客户端想象成一个预过滤器。客户端的目的是进行"预检查",防止不需要的数据耗尽带宽(发送到服务器和"坏数据"响应),并防止在服务器上使用处理周期。客户端也将比服务器端响应更快(因为没有请求-响应),但这实际上只是高延迟连接的感知性能问题。服务器端将始终运行,因此验证应该始终在服务器端开始。

  2. 这是用户的偏好问题。就我个人而言,除非有人非常友好地要求我这样做,否则我不会编写弹出窗口,主要是因为它会分散表单的注意力,并且需要额外的工作(通常是一次点击)来关闭。高亮显示的消息不需要做这两件事,一些验证例程甚至可以很好地将重点放在第一个无效字段上。如果页面上有足够的空间,那么在每个字段旁边加上一条消息就很方便,看起来也很漂亮。但是,如果页面上的空间非常有限,那么大多数验证例程将在该字段旁边放一个星号,并将所有单独的验证消息放在页面的一个位置上。

在你的表之后,你可以保留一个不写任何东西的div。但是有一个id。

验证后,只需通过document.get('div_id')访问该div,然后为其赋值。

使用这个,你甚至可以用红色和其他颜色来显示验证。这样的显示比弹出式要好,因为当软件出现时,点击次数应该是最少的。

只需在HTML中为错误消息添加占位符。例如:

    <td>
        <input id="Description" type="text"/><span id="descriptionErrorPlaceholder" />
    </td>

然后在你的javascript中,使用jQuery或常规javascript添加你的警告信息。

$("#descriptionErrorPlaceholder").text("Warning message");

如果您已经在使用jQuery,您可能能够获得使用jQuery验证插件的批准,因为无论何时您开始一个新项目,它都是微软MVC应用程序的标准配置。话虽如此,我确实意识到让插件获得批准有多难,因为我支持不同的政府客户。看起来您可以为每个输入元素添加一个标记,然后修改span的类以显示和隐藏它,就像您在突出显示输入框时所做的那样。

我不能在我的工作机器上测试,但我认为它是这样的:

$(function () {
    $("#Save").click(Validate);
});
function Validate() {
var invalidValues = [];
var validValues = [];
var Code = $("#Code").val();
var Description = $("#Description").val();
var Status = $("#Status ").val();    
var requiredFields = { '#Code' : Code,
                         '#Description' : Description,
                         '#Status ' : Status };
    $.each(requiredFields, function (key, value) {
        if (value.length == 0) {
            invalidValues.push(key);
        }
        else { validValues.push(key); }
    });
        var invalidFields = invalidValues.toString();
        var validFields = validValues.toString();
    if (invalidValues.length > 0){
        $(invalidFields).addClass("highlighted");
        $(validFields).removeClass("highlighted");  
        $(invalidFields + "Validator").addClass("showValidation");
        $(invalidFields + "Validator").removeClass("hideValidation");
        return false;
    }
    $(validFields).removeClass("highlighted");
    $(validFields + "Validator").removeClass("showValidation");
    $(invalidFields + "Validator").addClass("hideValidation");
}

与HTML

<div>
    <table>
    <tr>
        <th>
            Code
        </th>
        <td>
           <input maxlength="4" id="Code" type="text"/><span id="CodeValidator" class="hideValidation" />
        </td>
    </tr>
        <tr>
        <th>
            Description
        </th>
        <td>
            <input id="Description" type="text"/><span id="DescriptionValidator" class="hideValidation" />
        </td>
    </tr>
        <tr>
        <th>
            Status
        </th>
        <td>
            <input id="Status" type="text"/><span id="StatusValidator" class="hideValidation" />
        </td>
    </tr>    
    <tr>  
        <th>
    </th>      
        <td>
            <button id="Save" type="button">Save</button>
        </td>        
    </tr>
    </table>
</div>