验证表单函数跳转到错误?

时间:2012-06-12 14:45:01

标签: javascript forms validation

我有一个表单,其中包含一个完美运行的验证脚本。但是,我希望表单跳转到不验证的字段或显示错误消息中字段的名称。

我用来验证的代码是:

else
{
    var valid = document.formvalidator.isValid(f);
}

if (flag == 0 || valid == true) {
    f.check.value = '<?php echo JUtility::getToken(); ?>';//send token
}
else {
    alert('There was an error with the fields..');
    return false;
}
return true;

如何获取警报以命名需要正确填写的字段或跳转到特定字段?

编辑----------

您好,

到目前为止,感谢您的帮助。我是JS的新手。表格是Joomla的一个组成部分。

验证表单的完整功能是

function validateForm(f){
    var browser = navigator.appName;
    if (browser == "Microsoft Internet Explorer"){
            var flag = 0;
            for (var i=0;i < f.elements.length; i++) {
                el = f.elements[i];
                 if ($(el).hasClass('required')) {
                     var idz= $(el).getProperty('id');
                        if(document.getElementById(idz)){
                            if (!document.getElementById(idz).value) {
                                document.formvalidator.handleResponse(false, el);
                                flag = flag + 1;
                            }
                       }
                 }
            }
    }
    else {
        var valid = document.formvalidator.isValid(f);
    }

    if(flag == 0 || valid == true){
        f.check.value='<?php echo JUtility::getToken(); ?>';//send token
    }
    else {
        alert('<?php echo JText::_('JBJOBS_FIEDS_HIGHLIGHTED_RED_COMPULSORY'); ?>');
        return false;
    }
    return true;
}

外部js文件:

  var JFormValidator = new Class(
    {
        initialize : function() {
            this.handlers = Object();
            this.custom = Object();
            this.setHandler("username", function(b) {
                regex = new RegExp("[<|>|\"|'|%|;|(|)|&]", "i");
                return !regex.test(b)
            });
            this.setHandler("password", function(b) {
                regex = /^\S[\S ]{2,98}\S$/;
                return regex.test(b)
            });
            this.setHandler('passverify',
                    function (value) {
                    return ($('password').value == value);
            }
            ); // added March 2011
            this.setHandler("numeric", function(b) {
                regex = /^(\d|-)?(\d|,)*\.?\d*$/;
                return regex.test(b)
            });
            this
                    .setHandler(
                            "email",
                            function(b) {
                                regex = /^[a-zA-Z0-9._-]+(\+[a-zA-Z0-9._-]+)*@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
                                return regex.test(b)
                            });
            var a = $$("form.form-validate");
            a.each(function(b) {
                this.attachToForm(b)
            }, this)
        },
        setHandler : function(b, c, a) {
            a = (a == "") ? true : a;
            this.handlers[b] = {
                enabled : a,
                exec : c
            }
        },
        attachToForm : function(a) {
            a.getElements("input,textarea,select")
                    .each(
                            function(b) {
                                if (($(b).get("tag") == "input" || $(b)
                                        .get("tag") == "button")
                                        && $(b).get("type") == "submit") {
                                    if (b.hasClass("validate")) {
                                        b.onclick = function() {
                                            return document.formvalidator
                                                    .isValid(this.form)
                                        }
                                    }
                                } else {
                                    b.addEvent("blur", function() {
                                        return document.formvalidator
                                                .validate(this)
                                    })
                                }
                            })
        },
        validate : function(c) {
            c = $(c);
            if (c.get("disabled")) {
                this.handleResponse(true, c);
                return true
            }
            if (c.hasClass("required")) {
                if (c.get("tag") == "fieldset"
                        && (c.hasClass("radio") || c.hasClass("checkboxes"))) {
                    for ( var a = 0;; a++) {
                        if (document.id(c.get("id") + a)) {
                            if (document.id(c.get("id") + a).checked) {
                                break
                            }
                        } else {
                            this.handleResponse(false, c);
                            return false
                        }
                    }
                } else {
                    if (!(c.get("value"))) {
                        this.handleResponse(false, c);
                        return false
                    }
                }
            }
            var b = (c.className && c.className
                    .search(/validate-([a-zA-Z0-9\_\-]+)/) != -1) ? c.className
                    .match(/validate-([a-zA-Z0-9\_\-]+)/)[1]
                    : "";
            if (b == "") {
                this.handleResponse(true, c);
                return true
            }
            if ((b) && (b != "none") && (this.handlers[b])
                    && c.get("value")) {
                if (this.handlers[b].exec(c.get("value")) != true) {
                    this.handleResponse(false, c);
                    return false
                }
            }
            this.handleResponse(true, c);
            return true
        },
        isValid : function(c) {
            var b = true;
            var d = c.getElements("fieldset").concat($A(c.elements));
            for ( var a = 0; a < d.length; a++) {
                if (this.validate(d[a]) == false) {
                    b = false
                }
            }
            new Hash(this.custom).each(function(e) {
                if (e.exec() != true) {
                    b = false
                }
            });
            return b
        },
        handleResponse : function(b, a) {
            if (!(a.labelref)) {
                var c = $$("label");
                c.each(function(d) {
                    if (d.get("for") == a.get("id")) {
                        a.labelref = d
                    }
                })
            }
            if (b == false) {
                a.addClass("invalid");
                a.set("aria-invalid", "true");
                if (a.labelref) {
                    document.id(a.labelref).addClass("invalid");
                    document.id(a.labelref).set("aria-invalid", "true");
                }
            } else {
                a.removeClass("invalid");
                a.set("aria-invalid", "false");
                if (a.labelref) {
                    document.id(a.labelref).removeClass("invalid");
                    document.id(a.labelref).set("aria-invalid", "false");
                }
            }
        }
    });
document.formvalidator = null;
window.addEvent("domready", function() {
document.formvalidator = new JFormValidator() 
});

我会在哪里编辑代码,因为你们中的一些人已经在下面回答过了?

3 个答案:

答案 0 :(得分:0)

使用 jquery js库,滚动到元素(id选择器或类)

<p class="error">There was a problem with this element.</p>

这会以下列方式传递给ScrollTo插件。

$.scrollTo($('p.error:1'));

请参阅source

答案 1 :(得分:0)

您可以让isValid例程返回错误消息,而不是返回布尔值。

在isValid中,您可以构建错误消息以包含有错误的字段名称。

不是检查“valid == true”,而是检查“errorMessage.length == 0”。

如果你想专注于一个错误字段(你只能专注于一个),那么也可以在isValid例程中这样做。

function isValid(f) {
   var errorMessage = ""; 
   var errorFields = "";
   var isFocused = false;
   ...
   if (field has an error) {
       errorFields += " " + field.name;
       if (!isFocused) {
           field.focus();
           isFocused = true;
       }
   }
   ...
   if (errorFields.length > 0) {
      errorMessage = "Errors in fields: " + errorFields;
   }

   return (errorMessage);
}

然后,在你的调用程序中:

var errorMessage = isValid(f);
if (flag == 0 || errorMessage.length == 0) {
    f.check.value='<?php echo JUtility::getToken(); ?>';//send token
}
else {
    alert(errorMessage);
    return false;
}
return true;

答案 2 :(得分:0)

使用jQuery的.each,遍历字段。在每次迭代时,被调查的项目都将在this变量下。

因此,this.id给出了您正在寻找的元素的ID。存储这些字段以收集所有不正确的字段,然后突出显示它们或在消息中打印它们的名称。

请记住,这是基本的想法,在您显示处理表单的代码之前,我无法给出实际答案。

亲切的问候,

d