jQuery / JS设置全局变量,但卡在传递给AJAX自定义函数
jQuery / JS setting global variables but stuck passing to AJAX custom function
我正在尝试设置一些全局变量,但有点卡在如何触发自定义函数上,该函数对数据执行 AJAX 请求,我在一个函数和其他事件中收集电子邮件,还有名字和姓氏,但现在我卡住了。
我没有在任何地方打电话给fireCheckoutAC,因为这就是我坚持的。我是jQuery和JS的新手,但我认为我已经尽我所能了。
// set global variables
var checkoutEmail = "";
var checkoutFirstName = "";
var checkoutLastName = "";
$(document).ready(function() {
function fireCheckoutAC(checkoutEmail, checkoutFirstName, checkoutLastName) {
$.ceAjax('request', fn_url('ac.email'), {
method: 'post',
data: {
'email': checkoutEmail,
'firstname': checkoutFirstName,
'lastname': checkoutLastName
},
caching: true
});
}
// function to check email field, validate and save to ac for this customer session
function checkIt(field) {
field = $(field);
var email = field.val();
var emailError = "<p>The email address in the <b>E-mail</b> field is invalid.</p>";
var emailInputId = field.attr('id');
if ($("." + emailInputId + "_error_message").length > 0) {
$("." + emailInputId + "_error_message").remove();
}
//console.log($(emailInputId+"_error_message"));
if (validEmail(email)) {
//alert('valid email');
checkoutEmail = email;
field.removeClass('cm-failed-field');
field.prev().removeClass('cm-failed-label');
field.next("span").remove();
} else {
field.addClass('cm-failed-field');
field.prev().addClass('cm-failed-label');
field.after("<span class='" + emailInputId + "_error_message help-inline' ><p>" + emailError + "</p></span>");
}
}
// lets check if the email input was already populated, such as browser auto fill etc.. if so use that and save
var field = $('#onestepcheckout .ty-billing-email input')[0];
if ($(field).length > 0) {
if (field.value) {
checkIt(field);
}
}
// check email thats inputted and save to ac session for this customer, or if email changed to update
$('#onestepcheckout .ty-billing-email input').blur(function() {
checkIt(this);
});
// if first name entered lets grab it and add to the ac session for the customer
var firstname_sel = '#onestepcheckout .ty-billing-first-name input';
var lastname_sel = '#onestepcheckout .ty-billing-last-name input';
$(firstname_sel+','+lastname_sel).blur(function() {
checkoutFirstName = $(firstname_sel).val();
checkoutLastName = $(lastname_sel).val();
});
// lets grab the first name and last name if already in input
var firstname_sel_pre = $('#onestepcheckout .ty-billing-first-name input')[0];
var lastname_sel_pre = $('#onestepcheckout .ty-billing-last-name input')[0];
if ($(firstname_sel_pre).length > 0 || $(lastname_sel_pre).length > 0) {
if (firstname_sel_pre.value || lastname_sel_pre.value) {
checkoutFirstName = $(firstname_sel_pre).val();
checkoutLastName = $(firstname_sel_pre).val();
}
}
});
设法解决了,这是其他任何想知道的人的解决方案......只需要调用处理全局变量的 Ajax 函数
/* grab completed email when enetred into checkout and add to abandoned cart
for that session */
function validEmail(v) {
var r = new RegExp(/^(("['w-'s]+")|(['w-]+(?:'.['w-]+)*)|("['w-'s]+")(['w-]+(?:'.['w-]+)*))(@((?:['w-]+'.)*'w['w-]{0,66})'.([a-z]{2,6}(?:'.[a-z]{2})?)$)|(@'[?((25[0-5]'.|2[0-4][0-9]'.|1[0-9]{2}'.|[0-9]{1,2}'.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})'.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})']?$)/i);
return (v.match(r) == null) ? false : true;
}
// set global variables
var checkoutEmail = "";
var checkoutFirstName = "";
var checkoutLastName = "";
$(document).ready(function() {
function fireCheckoutAC() {
$.ceAjax('request', fn_url('ac.email'), {
method: 'post',
data: {
'email': checkoutEmail,
'firstname': checkoutFirstName,
'lastname': checkoutLastName
},
caching: true
});
}
// function to check email field, validate and save to ac for this customer session
function checkIt(field) {
field = $(field);
var email = field.val();
var emailError = "<p>The email address in the <b>E-mail</b> field is invalid.</p>";
var emailInputId = field.attr('id');
if ($("." + emailInputId + "_error_message").length > 0) {
$("." + emailInputId + "_error_message").remove();
}
//console.log($(emailInputId+"_error_message"));
if (validEmail(email)) {
//alert('valid email');
checkoutEmail = email;
fireCheckoutAC();
field.removeClass('cm-failed-field');
field.prev().removeClass('cm-failed-label');
field.next("span").remove();
} else {
field.addClass('cm-failed-field');
field.prev().addClass('cm-failed-label');
field.after("<span class='" + emailInputId + "_error_message help-inline' ><p>" + emailError + "</p></span>");
}
}
// lets check if the email input was already populated, such as browser auto fill etc.. if so use that and save
var field = $('#onestepcheckout .ty-billing-email input')[0];
if ($(field).length > 0) {
if (field.value) {
checkIt(field);
}
}
// check email thats inputted and save to ac session for this customer, or if email changed to update
$('#onestepcheckout .ty-billing-email input').blur(function() {
checkIt(this);
});
// if first name entered lets grab it and add to the ac session for the customer
var firstname_sel = '#onestepcheckout .ty-billing-first-name input';
var lastname_sel = '#onestepcheckout .ty-billing-last-name input';
$(firstname_sel+','+lastname_sel).blur(function() {
checkoutFirstName = $(firstname_sel).val();
checkoutLastName = $(lastname_sel).val();
fireCheckoutAC();
});
// lets grab the first name and last name if already in input
var firstname_sel_pre = $('#onestepcheckout .ty-billing-first-name input')[0];
var lastname_sel_pre = $('#onestepcheckout .ty-billing-last-name input')[0];
if ($(firstname_sel_pre).length > 0 || $(lastname_sel_pre).length > 0) {
if (firstname_sel_pre.value || lastname_sel_pre.value) {
checkoutFirstName = $(firstname_sel_pre).val();
checkoutLastName = $(firstname_sel_pre).val();
fireCheckoutAC();
}
}
});
相关文章:
- 自定义函数中的光标位置
- Google Sheet自定义函数返回0
- 其中是自定义函数中的属性
- 创建自定义函数以在函数上运行完整的多选下拉列表
- Google Sheets自定义函数条件格式
- dalek回调或自定义函数
- UI网格:如何从自定义函数访问MODEL_COL_FIELD
- 评估作为参数传递给 Google 电子表格中自定义函数的条件
- 具有自定义函数调用的 HTML 表单
- 使用 jQuery 对动态创建的元素调用自定义函数
- 从自定义函数返回promise
- extjs-使用传递的参数创建自定义函数
- AngularJS DI用于自定义函数
- Javascript 自定义函数错误
- jQuery / JS设置全局变量,但卡在传递给AJAX自定义函数
- 从Google电子表格自定义函数进行的Ajax调用
- AJAX路由不适用于我在Laravel中的自定义函数
- 从自定义函数返回ajax响应作为html到骨干视图
- 如何使用自定义函数在每次重新加载网格时访问JQgrid ajax返回数据
- 如何在jquery ajax成功调用之前调用自定义函数