function(evt)Javascript File API

时间:2013-09-28 13:23:52

标签: javascript function javascript-events input fileapi

我遇到了javascript File API的问题。首先,我正在检查表单输入是否有价值,如果表单输入类型=文件名是图像,我希望它获取图像:

function checkIfValued() {
    $("form input, textarea").change(function() {
        // ifs ....
        else if (name === "image") {
            checkQrCode();
        }
        // else ifs ....
    });
}

获取图片:

function checkQrCode(evt) {
    var qrcode = evt.target.files[0]; // create a FileList and take the first one

    if (!qrcode.type.match("image.*")) { // check to see if it is an image
        var $parentDiv = $(this).parent().parent();
        $parentDiv.removeClass("has-success"); 
        $parentDiv.addClass("has-error");
        return;
    }

    var reader = new FileReader(); // create a FileReader

    reader.onload = function (evt) {    
        var img = new Image(); // create a new image
        img.src = event.target.result; // set the src of the img to the src specified
        if ($("#qrcode").siblings().length != 0) { // if qrcode has siblings (function already executed)
            $("#qrcode").siblings().remove(); // remove the siblings
        }
        $("#qrcode").parent().append(img); // append the img to the parent
        $("#qrcode").siblings("img").addClass("img-thumbnail");
        $("#qrcode").siblings("img").css("float", "left");
    }
    reader.readAsDataURL(qrcode);
}

我用的时候:

$("#qrCode").change(checkQrCode);

它有效,但是当我使用第一个代码时却没有。我想它与checkQrCode函数中的事件有关(在最后一个代码中,事件直接与函数绑定,在第二个代码中它有一个if语句)。

无论如何,如何修复它,如果有人能解释事件/ evt选项,我们将非常感激。

由于

1 个答案:

答案 0 :(得分:1)

您的checkQrCode函数希望接收触发事件,该事件在事件回调中作为参数提供。

当你这样称呼时:

$("#qrCode").change(checkQrCode);

...然后甚至通过回调传递给函数。但是,在您的第一个示例中,您忽略了事件并调用了没有参数的事件期望函数。

你希望它看起来更像这样:

$("form input, textarea").change(function(evt) {
  // ...
  checkQrCode(evt);