2

我在我正在处理的网站上使用 require ,在结帐时,我遇到了问题。我正在尝试更改信用卡图像以显示激活的卡号是他们输入的任何数字。

但是,每次按下一个键时,我都会收到此错误:

Uncaught TypeError: object is not a function 

它说它来自我的“控制器”的第 12 行,即:

var chkCard = new CreditImage($(this).val(), '.icon-credit-cards');

未捕获的类型错误:对象不是函数(重复 3 次)

这是我的“演示者”,又名 assets/scripts/presenters/CreditImage.js

require(
    [
        'jquery'
    ],
    function ($) {
        "use strict";

        var CreditImage = function ($number, $el) {
            // Match and define
            var visa = $number.match(/^4[0-9]{12}(?:[0-9]{3})?$/);
            var mastercard = $number.match(/^5[1-5][0-9]{14}$/);
            var amex = $number.match(/^3[47][0-9]{13}$/);
            var discover = $number.match(/^6(?:011|5[0-9]{2})[0-9]{12}$/);
            var matched;

            // Create matched var
            if (visa) {
                matched = "visa";
            } else if (mastercard) {
                matched = "mastercard";
            } else if (amex) {
                matched = "amex";
            } else if (discover) {
                matched = "discover";
            }

            if (matched) {
                // Highlight the matched credit card
                $("."+$el+":not("+$el+"-" + matched + ")").addClass($el);
                $("."+$el).addClass($el+"-" + matched);
            } else {
                // No match, highlight them all
                $(".+$el).removeClass().addClass($el);
            }

            return matched;
        }
    }
);

这是“控制器”:

require(
    [
        'jquery',
        'assets/scripts/presenters/CreditImage'
    ],
    function ($, CreditImage) {
        'use strict';
        $(function () {         
            // Credit card validation
            $("#add-cc-card-number").bind("keyup", function () {

                var chkCard = new CreditImage($(this).val(), 'icon-credit-cards'));

            });

        });
    }
);
4

2 回答 2

1

我看到了两个问题,一个足以阻止您的代码工作。

范围问题#1

CreditImage()对于在其中声明的匿名函数是私有的。现在,老实说,我对 requirejs 了解不多,但是不可能从其父函数外部访问这种局部范围的函数。

您需要检查 requirejs 代码的示例,以了解其他人如何将其函数设计为可在单独的 requirejs 调用之间调用(或者他们可能只使用一个调用?)。或者也许可以找到一些好的教程或博客文章。

无论如何,你现在拥有它的方式是行不通的。

范围问题 #2

您的第二个代码块具有CreditImage作为参数。这意味着在函数内部,对该名称的引用将始终引用参数,并且永远不能引用任何外部作用域的函数或变量。同样,我对requirejs不熟悉,但是您确定它是将CreditImage函数传递给CreditImage参数吗?

使用 Chrome 或安装了 Firebug 的 Firefox,添加console.log(CreditImage);到您的下部函数中以查看正在传递的内容。至少在 Windows 中,F12 会调出调试工具。从那里找到控制台并运行您的代码。

于 2013-01-09T20:13:42.327 回答
0

尝试插入 document.domain ="yourDomain"; 作为页面中的参数

于 2013-01-21T15:37:30.873 回答