Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery全局变量?如何做到这一点?_Jquery - Fatal编程技术网

jquery全局变量?如何做到这一点?

jquery全局变量?如何做到这一点?,jquery,Jquery,好的,我有一个以上的验证: var error = true; 下面是我的所有验证,例如: /* FIRST NAME VALIDATION */ $("#firstname").change(function () { var firstname = $('#firstname').val(); if (firstname == ""){ $('#firstname').css({"border-color":"#3399ff"}); $('#

好的,我有一个以上的验证:

var error = true;
下面是我的所有验证,例如:

/* FIRST NAME VALIDATION */
$("#firstname").change(function () {
    var firstname = $('#firstname').val();
    if (firstname == ""){
        $('#firstname').css({"border-color":"#3399ff"});
        $('#firstname-err').html("You must enter your first name.").removeClass("success_msg").addClass("error_msg");
        error = true;
    }else{
        $('#firstname-err').html("Thank you " + firstname + ", thats perfect!").removeClass("error_msg").addClass("success_msg");;
        $('#firstname').css({"border-color":"#1f6d21"});
        error = false;
    }
});
我在验证的底部有这个

if(error == true)
{
    $('#btn-join').css({"opacity":"0.4"});
    $('#btn-join').attr("disabled", true);
}
else
{
    $('#btn-join').css({"opacity":"1"});
    $('#btn-join').attr("disabled", false);
}
基本上,我希望它在每一个页面上运行,如果它们都为false,那么提交按钮将被启用

我该怎么做呢


我是jQuery的新手,如果我没有理解的话,很抱歉。

要在JavaScript或jQuery中获得全局变量,您需要做的就是在最广泛的范围内声明它,然后再次引用它(不带var关键字)。我通常在jQuery ready()函数之前声明这些变量。这样,您就可以在脚本的整个文档中访问变量。只需确保不使用var重新声明变量,否则会得到它的本地化版本

关于您的逻辑,我假设您正在验证多个字段。由于这些字段中的任何一个都可能将
error
变量设置为true,因此您需要避免在单个验证测试中将其设置为false。下面是我要做的:

  • 在jQuery代码之外声明
    错误
    变量
  • 当验证函数启动时,将
    error
    初始化为false
  • 运行每个字段的验证测试。如果测试失败,请标记它 为用户直观显示,并将
    error
    设置为true。如果测试通过, 不要更改
    error
    的值
  • 对每个字段的测试重复上述步骤
  • 所有测试完成后,测试
    error
    的值,查看是否所有 测试通过,或者如果您有错误。据此行动

我希望这会有所帮助。

将更改事件绑定到表单,然后所有表单字段都将触发它。在该函数中,验证所有数据


这样,每当表单中的任何值发生更改时,按钮都会更新为正确的状态。

我不确定您的问题是什么,或者您在问什么

就变量的作用域而言,只要在代码块之前声明它,那么它就应该在jquery代码的作用域中

不过我可以预见你的方法会有一些问题

我最初会设置
var error=false。在开始之前,您没有任何错误

然后您不需要设置
error=false代码中的任意位置。如果执行此操作,则在脚本中将其更改为
true
之前的任何时间都是否定的

假设您先验证第一个名称,然后验证第二个名称

名字有一个错误,所以您可以设置
error=true

第二个名称没有错误,因此您设置了
error=false
。这将使您感到困惑,因为您忘记了名字有错误

最后一个更好的方法是设置
var error=''。然后,在执行以下操作时:
error+=“您需要填写您的名字。
或类似。这样,当您到达末尾时,而不是查看
error===true
时,您可以查看
error!=''。如果计算结果为true,则可以输出错误,该错误将包含在error变量中,该变量将合并在脚本运行过程中遇到的所有错误


希望这能有所帮助。

此外:虽然这不是很好,但您也可以通过不使用
var
关键字来确保您的变量将被全局声明。这将自动在全局范围内声明该变量。你是说它不工作吗?(顺便说一句,如果(错误)
,您可能还想看看其他一些指定CSS的方法(比如类),或者只使用jQuery验证插件。但是,在每次成功输入后,按钮是否会闪烁?这意味着有人可以很容易地填写一个输入框,然后提交表单?你是正确的,消息在第一次输入后会闪烁,但是,如果没有按钮或其他东西触发对从未聚焦或更改的输入项的验证,你将如何验证消息是否全部填写?这是给你的一本JSFIDLE。我不认为这是一个问题-表单只有在整个内容有效的情况下才能提交。按钮本身不会闪烁,它会保持关闭状态。嗨,BNL,这似乎可行,但如果验证(例如,如果firstname在firstname更改函数中)则不起作用-如果每个输入验证都在更改函数中,如何使其工作?我在顶部将错误设置为true的原因是,页面加载时禁用了提交按钮。让我试试你的建议。我明白了。。。如果每次都要从偏移量禁用按钮,那么不能在HTML中将其设置为禁用吗?