Javascript 从jQuery中的嵌套函数中调用函数
我猜这是一个范围问题,但我无法解决!我有一个函数,它在发送表单之前验证表单。提交时,它遍历每个字段并检查详细信息。然后,它应该为每个值设置一个cookie,因为表单会暂时将用户从站点发送出去,当用户返回时,我需要这些数据 我有一个set cookie函数,它工作得很好,但是从两个嵌套函数中调用这个函数却没有任何作用Javascript 从jQuery中的嵌套函数中调用函数,javascript,jquery,scope,each,Javascript,Jquery,Scope,Each,我猜这是一个范围问题,但我无法解决!我有一个函数,它在发送表单之前验证表单。提交时,它遍历每个字段并检查详细信息。然后,它应该为每个值设置一个cookie,因为表单会暂时将用户从站点发送出去,当用户返回时,我需要这些数据 我有一个set cookie函数,它工作得很好,但是从两个嵌套函数中调用这个函数却没有任何作用 $(document).ready(function() { $("form#mainRequestBrochure").submit(function(event) {
$(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方法中。向我们展示添加的代码,请参见上文。对我来说似乎没问题……天哪,我不敢相信我犯了这样的错误。你是绝对正确的。剪切粘贴是有史以来最糟糕的事,在草率的代码编写者之后。