【问题标题】:JSHint "not defined" errorsJSHint“未定义”错误
【发布时间】:2013-09-07 20:29:57
【问题描述】:

我有这个函数用来验证联系表单,但是当我通过 JSHint 运行它时,我得到了大量的“未定义”错误。我是一个 jquery 菜鸟,我不确定这些应该如何定义。

(function ($, document, undefined) {
$(document).ready(function(){

    // Place ID's of all required fields here.
    required = ["name", "email", "message"];
    // If using an ID other than #email or #error then replace it here
    email = $("#email");
    errornotice = $("#error");
    // The text to show up within a field when it is incorrect
    emptyerror = "Please fill out this field.";
    emailerror = "Please enter a valid e-mail.";

    $("#theform").submit(function(){
        //Validate required fields
        for (i=0;i<required.length;i++) {
            var input = $('#'+required[i]);
            if ((input.val() == "") || (input.val() == emptyerror)) {
                input.addClass("needsfilled");
                input.val(emptyerror);
                errornotice.fadeIn(750);
            } else {
                input.removeClass("needsfilled");
            }
        }
        // Validate the e-mail.
        if (!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email.val())) {
            email.addClass("needsfilled");
            email.val(emailerror);
        }

        //if any inputs on the page have the class 'needsfilled' the form will not submit
        if ($(":input").hasClass("needsfilled")) {
            return false;
        } else {
            errornotice.hide();
            return true;
        }
    });

    // Clears any fields in the form when the user clicks on them
    $(":input").focus(function(){       
       if ($(this).hasClass("needsfilled") ) {
            $(this).val("");
            $(this).removeClass("needsfilled");
       }
    });
});
})(jQuery, document);

这里有几个例子:

来自表单数据 - 未定义“必需”。

required = ["name", "email", "message"];

'i' 未定义。

for (i=0;i<required.length;i++) {

并且“电子邮件”未定义。

if (!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email.val())) {

【问题讨论】:

    标签: javascript jquery debugging jshint


    【解决方案1】:

    嗯,这最终可能是一个风格问题。使用没有var 声明的变量显然意味着您正在使用未声明的变量。在某些情况下,这样做是为了生成具有全局范围的变量。这当然可以(以一种更简洁的方式)通过使用var email; 在所有闭包外部 的某处声明变量来实现。

    【讨论】:

      【解决方案2】:

      你应该用“var”来定义变量:

      var required = ["name", "email", "message"];
      for(var i...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-03
        • 2014-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-10
        • 2014-01-17
        • 2012-02-09
        相关资源
        最近更新 更多