我正在使用我正在处理的网站上的需求,并且在结帐时,我遇到了问题。我正在尝试更改信用卡图片,以显示激活的卡号是他们输入的号码。
但是,每按一次键,我都会收到此错误:
Uncaught TypeError: object is not a function
它说它来自我的“控制器”的第12行,即:
var chkCard = new CreditImage($(this).val(), '.icon-credit-cards');
未捕获TypeError:对象不是函数(重复3次)
这是我的“演示者”,即资产/剧本/演示者/ 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'));
});
});
}
);
答案 0 :(得分:1)
我看到有两个问题,或者只有一个问题可以阻止你的代码工作。
确定问题范围#1
CreditImage()
对其声明的匿名函数是私有的。现在,说实话,我对requirejs了解不多,但是这种本地范围的函数无法从其父函数外部访问。
您需要检查requirejs代码的示例,以了解其他人如何设计其函数以在不同的requirejs调用之间调用(或者他们可能只使用一次调用?)。或者可能会找到一些好的教程或博客文章。
无论如何,你现在拥有它的方式是行不通的。
确定问题范围#2
您的第二个代码块以CreditImage
为参数。这意味着在函数内部,对此名称的引用将始终引用该参数,并且永远不会引用任何外部作用域函数或变量。同样,我不熟悉requirejs,但您确定它将CreditImage
函数传入CreditImage
参数吗?
使用Chrome或使用安装了Firebug的Firefox,将console.log(CreditImage);
添加到较低的功能中以查看传入的内容。至少在Windows中,F12会调出调试工具。从那里,找到控制台并运行你的代码。
答案 1 :(得分:0)
尝试插入document.domain =" yourDomain&#34 ;; 作为页面中的参数