0

我正在努力在我的网页上显示验证消息。我有一个 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>

我想在我的网页底部显示一条消息,说“请输入有效值:代码”。我将无效值存储在我的 js 函数“Validate”中的变量“invalidValues”中如何在我的网页中访问这些值?

我还有一些关于什么是进行验证的最佳方式的问题?客户端与服务器端?另外,显示弹出验证消息还是嵌入在网页上的突出显示消息更好?

4

4 回答 4

1

如果您已经在使用 jQuery,您可能能够获得使用 jQuery Validation 插件的批准,因为现在无论您何时开始一个新项目,它都是 Microsoft MVC 应用程序的标准配置。话虽如此,我确实认识到插件获得批准是多么困难,因为我支持不同的政府客户。看起来您可以为每个输入元素添加一个标签,然后修改该跨度的类以显示和隐藏它,类似于您在突出显示输入框时已经执行的操作。

我无法在我的工作机器上对此进行测试,但我认为它类似于:

$(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>
于 2013-01-10T19:16:13.023 回答
1

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

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

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

$("#descriptionErrorPlaceholder").text("Warning message");
于 2013-01-10T18:55:20.820 回答
1

我对 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. 进行验证的最佳方法是什么?客户端与服务器端?
  2. 另外,显示弹出验证消息还是嵌入在网页上的突出显示消息更好?

为了:

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

  2. 这是您的用户的偏好问题。就个人而言,除非有人很好地要求我这样做,否则我不会编写弹出窗口代码,主要是因为它会将注意力从表单上移开,并且需要额外的工作(通常是单击)才能关闭。突出显示的消息不必执行其中任何一项,一些验证例程甚至可以很好地将焦点放在第一个无效字段上。如果页面上有空间,则每个字段旁边的消息都很方便,并且看起来非常漂亮。但是,如果页面上的空间非常宝贵,则大多数验证例程都会在字段旁边放置一个星号,并将所有单独的验证消息放在页面上的一个位置。

于 2013-01-10T19:40:08.707 回答
1

在您的表格之后,您可以保留一个没有任何内容的 div。但有身份证。

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

使用它,您甚至可以使用红色等颜色显示验证。像这样显示比弹出窗口更好,因为当软件出现时,点击次数应该是最少的。

于 2013-01-10T18:59:38.047 回答