2013-09-28 5 views
0

자바 스크립트 파일 API에 문제가 있습니다. 우선은 폼 입력이 가치가 있다면 확인하고있어, 양식 입력 유형 = 파일 이름이 이미지 인 경우, 나는 그것이 이미지 싶어 :함수 (evt) 자바 스크립트 파일 API

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); 
} 

: 이미지를 얻기

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

을 내가 사용했을 때 :

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

그것은 효과가 있지만 첫 번째 코드를 사용할 때 그렇다. 아마도 checkQrCode 함수의 이벤트와 관련이 있다고 생각합니다 (마지막 코드에서 이벤트는 함수에 직접 연결되어 있고 두 번째 코드에는 if 문이 있습니다).

어쨌든 어떻게 해결할 수 있으며 누군가가 event/evt 옵션을 설명 할 수 있다면 매우 감사하겠습니다.

감사

+0

당신이 바이올린을 추가 할 수 있습니까? checkQRCode에서 이벤트는 아무 곳에서나 정의되지 않으므로 상위 함수 범위에서 변수에 액세스 할 가능성이 높습니다. –

+0

작업 코드가'$ ("# qrCode")와 같지 않은 것으로 확신합니까? change (checkQrCode)'? @KerryLiu는 두 예제에서 함수에 이벤트를 전달하지 않는다는 점에서 큰 차이가 있음을 알 수 있습니다. – numbers1311407

+0

@ numbers1311407 맞아, 바꿨어. 그렇다면 첫 번째 코드에서 어떻게 작동하게 할 수 있습니까? 첫 번째 코드에 넣으면 작동하지 않습니다 ... – bhc11

답변

1

귀하의 checkQrCode 기능은 이벤트 콜백의 인수로 주어진 트리거 이벤트를받을 것으로 기대하고있다.

이 같이 호출

는 :

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

... 그 심지어 콜백에 의해 함수에 전달되고있다. 그러나 첫 번째 예에서는 이벤트를 무시하고 인수없이 이벤트 기대 함수를 호출합니다.

당신은 더 같이 할 것 :

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

작동하지 않습니다 : http://jsfiddle.net/fXKUJ/ – bhc11

+0

예에서 나는'name' 변수가 숨겨진 곳에서 숨겨 졌다고 가정했습니다. '/ ifs'는 관련이 없기 때문에 주석을 달았습니다. 아니요, 당신의 바이올린은 당신이'name'을 테스트하고 있지만 정의하지는 않습니다. (비록 기괴하게도, "결과"로 정의된다). 입력 이름을 기반으로 QR 코드 콜백을 실행하려는 경우'$ (this) .attr ("name")'또는 무엇인가를 사용해보십시오. – numbers1311407

+0

원래 코드에서이 코드를 추가하는 것을 잊어 버렸습니다 ... 여전히 작동하지 않습니다. – bhc11