Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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
Javascript 从jQuery中的嵌套函数中调用函数_Javascript_Jquery_Scope_Each - Fatal编程技术网

Javascript 从jQuery中的嵌套函数中调用函数

Javascript 从jQuery中的嵌套函数中调用函数,javascript,jquery,scope,each,Javascript,Jquery,Scope,Each,我猜这是一个范围问题,但我无法解决!我有一个函数,它在发送表单之前验证表单。提交时,它遍历每个字段并检查详细信息。然后,它应该为每个值设置一个cookie,因为表单会暂时将用户从站点发送出去,当用户返回时,我需要这些数据 我有一个set cookie函数,它工作得很好,但是从两个嵌套函数中调用这个函数却没有任何作用 $(document).ready(function() { $("form#mainRequestBrochure").submit(function(event) {

我猜这是一个范围问题,但我无法解决!我有一个函数,它在发送表单之前验证表单。提交时,它遍历每个字段并检查详细信息。然后,它应该为每个值设置一个cookie,因为表单会暂时将用户从站点发送出去,当用户返回时,我需要这些数据

我有一个set cookie函数,它工作得很好,但是从两个嵌套函数中调用这个函数却没有任何作用

$(document).ready(function() {
    $("form#mainRequestBrochure").submit(function(event) {
        event.preventDefault();     //prevent form.submit()
        var missingData = 0;        // missing required fields counter
        $("form#contactForm input").each(function(index) {
            var ok = 0;
            var v = $(this).val();
            var n = $(this).attr('name');   
            if(isBlank(v)===true) {         // if empty
                $(this).addClass("error");  // add error class
                missingData++;              // add one to  counter
            } else if(($(this).attr('type')==="email")&&(!isValidEmailAddress(v))) {
                $(this).addClass("error");  
                missingData++;
            } else if ($(this).hasClass("error")) {     // not empty but has had error class applied
                $(this).removeClass("error");           // clear error class
                ok = 1;
            } else {
                ok = 1; 
            }
            if(ok===1) createCookie(n,v,7);
        });
        createCookie('Testing2','test',7);
        // if no errors recorded, submit the form
        if(missingData === 0 ) $("form#mainRequestBrochure").submit();
    }); 

});

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
    alert('cookie ' + name + ' set.');
}
直接在
$(“form#mainRequestManual”).submit(函数(事件)
中的代码运行良好,使用
createCookie('Testing2','test',7)
创建名为Testing2的cookie,但当我将同一行代码放在
.each()
循环中时,它什么也不做

$(document).ready(function() {
    $("form#mainRequestBrochure").submit(function(event) {
        event.preventDefault();     //prevent form.submit()
        var missingData = 0;        // missing required fields counter
        $("form#contactForm input").each(function(index) {
            var ok = 0;
            var v = $(this).val();
            var n = $(this).attr('name');   
            if(isBlank(v)===true) {         // if empty
                $(this).addClass("error");  // add error class
                missingData++;              // add one to  counter
            } else if(($(this).attr('type')==="email")&&(!isValidEmailAddress(v))) {
                $(this).addClass("error");  
                missingData++;
            } else if ($(this).hasClass("error")) {     // not empty but has had error class applied
                $(this).removeClass("error");           // clear error class
                ok = 1;
            } else {
                ok = 1; 
            }
            if(ok===1) createCookie(n,v,7);
        });
        createCookie('Testing2','test',7);
        // if no errors recorded, submit the form
        if(missingData === 0 ) $("form#mainRequestBrochure").submit();
    }); 

});

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
    alert('cookie ' + name + ' set.');
}

就像我所说的,我猜这是一个范围问题,但它让我感到非常不安。

将createCookie函数移到submit函数之外。

是否应该将“form#contactForm input”更改为“form#Main输入”?错误存在于你的createCookie方法中。向我们展示添加的代码,请参见上文。对我来说似乎没问题……天哪,我不敢相信我犯了这样的错误。你是绝对正确的。剪切粘贴是有史以来最糟糕的事,在草率的代码编写者之后。