JS函数未定义

时间:2014-07-13 11:41:57

标签: javascript html qr-code

当按钮" GenQR"点击没有任何反应。

Fiddle

控制台

Uncaught ReferenceError: JSQR is not defined(index):26
myqr (index):26
(anonymous function) (index):51
jQuery.event.dispatch jquery-2.1.0.js:4371
elemData.handle

HTML

<button type="button" id="qr"/>GenQR</button>

qr.js

document.addEventListener('DomContentLoaded', function () {
    document.getElementById('qr').addEventListener('click', myqr);
});
(function myqr() {
    var qr = new JSQR();
    var code = new qr.Code();

    code.encodeMode = code.ENCODE_MODE.BYTE;
    code.version = code.DEFAULT;

    code.errorCorrection = code.ERROR_CORRECTION.H;

    var input = new qr.Input();
    input.dataType = input.DATA_TYPE.TEXT;

    input.data = 'test';

    var matrix = new qr.Matrix(input, code);


    matrix.scale = 10;
    matrix.margin = 10;
    var canvas = document.createElement('canvas');
    canvas.setAttribute('width', matrix.pixelWidth);
    canvas.setAttribute('height', matrix.pixelWidth);
    canvas.getContext('2d').fillStyle = 'rgb(0,0,0)';
    matrix.draw(canvas, 0, 0);

    document.body.appendChild(canvas);
})();

2 个答案:

答案 0 :(得分:1)

在名为myqr()的JS函数中,您有以下语句:

var qr = new JSQR();

但是,在您的代码中没有定义JSQR,因此浏览器不知道您在说什么并抛出错误。

此外,单击按钮时没有任何反应,因为当出现上述错误时,函数退出...

答案 1 :(得分:0)

您提供的代码和小提琴有几个问题。第一个主要问题是jsqr没有像其他人提到的那样被定义。您需要设置jsqr库(http://code.jsqr.de/jsqr-0.2-min.js)的外部引用,否则它不知道该库是什么。

小提琴: http://jsfiddle.net/mcfarljw/n9PbR/

第二个问题是你调用了一个自调用函数,该函数在加载脚本时触发,因此在点击事件发生时不会被触发。

(function myqr() {
    //your code here
})();

你应该把它变成这样的函数:

function myqr() {
    //your code here
}

最后,您已将Click事件侦听器包装在DomContentLoaded侦听器中。当你使用jsfiddle配置它时,这是不需要的,因为脚本已经设置为运行onLoad。所以你可以删除它作为小提琴的例子,但是你需要在你的其他本地代码中加入类似的东西。