Javascript 来自外部的函数的目标部分

Javascript 来自外部的函数的目标部分,javascript,jquery,Javascript,Jquery,以下代码由第三方加载项自动带入我的站点 如果此区域表单中的某些必填项为空,我想取消表单提交。我通常只会使用returnfalse,但由于这段代码的缘故,这不起作用 window.CartthrobTokenizer = {}; (function(e){ var ender = require('ender'), bean = require('bean'), bonzo = require('bonzo'), qwery = requir

以下代码由第三方加载项自动带入我的站点

如果此区域表单中的某些必填项为空,我想取消表单提交。我通常只会使用returnfalse,但由于这段代码的缘故,这不起作用

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;