Javascript 来自外部的函数的目标部分
以下代码由第三方加载项自动带入我的站点 如果此区域表单中的某些必填项为空,我想取消表单提交。我通常只会使用returnfalse,但由于这段代码的缘故,这不起作用Javascript 来自外部的函数的目标部分,javascript,jquery,Javascript,Jquery,以下代码由第三方加载项自动带入我的站点 如果此区域表单中的某些必填项为空,我想取消表单提交。我通常只会使用returnfalse,但由于这段代码的缘故,这不起作用 window.CartthrobTokenizer = {}; (function(e){ var ender = require('ender'), bean = require('bean'), bonzo = require('bonzo'), qwery = requir
window.CartthrobTokenizer = {};
(function(e){
var ender = require('ender'),
bean = require('bean'),
bonzo = require('bonzo'),
qwery = require('qwery');
e.form = null;
e.submissionState = null;
e.errorHandler = function(errorMessage){
alert(errorMessage);
};
e.setErrorHandler = function(errorHandler){
this.errorHandler = errorHandler;
return this;
};
e.submitHandler = function(){
CartthrobTokenizer.form.submit();
};
e.setSubmitHandler = function(submitHandler){
this.submitHandler = submitHandler;
return this;
};
e.bindHandler = function(){
return true;
};
e.setBindHandler = function(bindHandler){
this.bindHandler = bindHandler;
return this;
};
e.beforeSubmit = function(){
return true;
};
e.setBeforeSubmit = function(beforeSubmit){
this.beforeSubmit = beforeSubmit;
return this;
};
e.addHidden = function(name, value){
bonzo(CartthrobTokenizer.form).append("<input type=\"hidden\" name=\""+name+"\" value=\""+value+"\">");
return this;
};
e.val = function(selector){
return bonzo(ender(CartthrobTokenizer.form).find(selector)).val();
};
e.bind = function(){
bean.add(CartthrobTokenizer.form, "submit", CartthrobTokenizer.submit);
};
e.unbind = function(){
bean.remove(CartthrobTokenizer.form, "submit", CartthrobTokenizer.submit);
};
e.submit = function(e){
if (CartthrobTokenizer.submissionState === true){
e.preventDefault();
return false;
}
CartthrobTokenizer.submissionState = true;
if (CartthrobTokenizer.beforeSubmit() !== false){
CartthrobTokenizer.bindHandler();
}
e.preventDefault();
return false;
};
e.init = function(bindHandler){
this.form = qwery("#checkout_form").shift();
this.setBindHandler(bindHandler);
return CartthrobTokenizer.bind();
};
})(CartthrobTokenizer);
CartthrobTokenizer.init(function(){
Stripe.createToken({
name: CartthrobTokenizer.val("#first_name") + " " + CartthrobTokenizer.val("#last_name"),
number: CartthrobTokenizer.val("#credit_card_number"),
cvc: CartthrobTokenizer.val("#CVV2"),
exp_month: CartthrobTokenizer.val("#expiration_month"),
exp_year: CartthrobTokenizer.val("#expiration_year"),
address_line1: CartthrobTokenizer.val("#address"),
address_line2: CartthrobTokenizer.val("#address2"),
address_city: CartthrobTokenizer.val("#city"),
address_state: CartthrobTokenizer.val("#state"),
address_zip: CartthrobTokenizer.val("#zip")
}, function(status, response){
if (response.error) {
CartthrobTokenizer.errorHandler(response.error.message);
CartthrobTokenizer.submissionState = false;
} else {
CartthrobTokenizer.addHidden("stripeToken", response["id"])
.addHidden("credit_card_number", response.card["last4"])
.addHidden("card_type", response.card["type"])
.submitHandler();
}
})
});
我尝试过使用它,但不确定如何调用它以进入第三方函数
有人能解释一下我如何瞄准“submissionstate”功能吗?我不确定我是否理解整个代码。。。在我看来,
submissionState
变量用于知道表单是否已经提交(一旦提交,值为true)。因此,您可以通过设置CartthrobTokenizer.submissionState=true来阻止提交代码>。但是您不能在bindHandeler
中设置它,因为在e.submit
@Sylvain Hi中检查submissionState
的值后调用此函数。谢谢你看。如果我调用“CartthrobTokenizer.submissionState=true;”或“CartthrobTokenizer.submissionState=false;”没有什么变化。这可能是因为它不在函数范围内吗?更改CartthrobTokenizer.submissionState的值应该不会有任何问题。如果要检查更改是否可行,可以添加:e.getSubmissionState=function(){console.log(this.submissionState);返回this.submissionState}代码>到您的模块,并从外部调用它,查看更改是否正确应用。现在我考虑一下。。。您是否使用CartthrobTokenizer
更改了所有此
?这应该不会有什么不同,但我认为这也没有用。(再一次,我离乞讨者不远了,所以我随时都可能出错,我所有的评论都是建议而不是指示)@Sylvain我试图输出状态,但得到“e未定义”。我没有更改任何“此”项。
CartthrobTokenizer.submissionState = false;