2012-12-17 3 views
7

내 머리카락을 꺼내십시오. 간단한 jQuery 메서드가 Safari 6에서 작동하지 않습니다.jQuery 메서드가 Safari 6에서 작동하지 않습니다.

다음 코드 블록은 Safari 6을 제외한 다른 모든 브라우저에서 작동합니다. Safari 5 이상에서는 Firefox에서 잘 작동하며 IE에서는 정상적으로 작동합니다. Chrome에서도 잘 작동합니다.

Safari 6에서 알림이 표시되므로 기능이 계속 실행되지만 다른 3 가지 방법 중 하나는 아무런 변화가 없습니다.

----- UPDATE ----- 여러 대의 컴퓨터에서 추가 테스트를 한 후 ... Mac OSX 10.8의 Safari 6에서만 작동하지 않습니다. 이 코드는 OSX 10.7의 Safari와 동일한 버전에서 잘 작동합니다. --------------------

jQuery 1.8.3을 실행 중입니다. 내 페이지가 HTML5로 확인됩니다.

HTML :

<div id="fileUploadFormContainer"> 

    <form id="fileUploadForm" action="/upload/do_upload/<?=$row->project_id?>" method="post" enctype="multipart/form-data" > 
     <fieldset> 
     <label for="userfile">Attach a file</label> 
      <input type="file" name="userfile" id="userfile" /><br /> 
      <input type="submit" id="fileUploadSubmit" value="Upload file" /> 
      <img class="loadingBar" id="fileUploadLoadingBar" src="/images/indicators/ajax-loader.gif" alt="" /> 
     </fieldset> 
    </form> 
</div><!-- end fileUploadFormContainer --> 

CSS :

.loadingBar { 
    display: none; 
} 

자바 스크립트 :

$(function(){ 
    // Submit Buttons 
    $('#fileUploadSubmit').click(function() 
    { 
     $('#fileUploadSubmit').attr('value', 'Uploading'); 
     $('#fileUploadSubmit').fadeTo('fast',0.6); 
     $('#fileUploadLoadingBar').fadeIn('fast'); 
     alert('Finished'); 
    }); 
}); 
+1

오류를 받으셨습니까? –

+0

그 줄에서 내가보고있는 유일한 이상한 점은'$ (...). attr ('value', 'Uploading');'입니다. 일반적으로'$ (...). val ('Uploading');'(또는'prop'를 사용할 수도 있습니다)를 사용합니다. 그러나 어쨌든'attr'이 작동한다고 생각합니다. 그리고 어쨌든, 그것은 페이드를 설명하지 않습니다. –

+1

새로운 SO 멤버로부터 ** 잘 묻는 ** 질문을 보는 것이 좋습니다. 좋은 분! –

답변

1

내가 틀릴 수도 있지만이 문제는 자바 스크립트가되기 전에 양식을 제출한다 생각 달리는. 이를 방지하려면 preventDefault를 사용해야 할 수도 있습니다. 버튼을 제출 버튼에서 유형 = "버튼"으로 변경할 수도 있으며 이는 도움이 될 수 있습니다. 죄송합니다 ... 빠른 편집 .. 콜백에 경고를 두어 페이드 인이 발생한 후 실행되도록합니다 ... 당신은 그것을 떠날 수도 있고 변경할 수도 있습니다.

$(function(){ 
    // Submit Buttons 
    $('#fileUploadSubmit').click(function(e) 
    { 
     e.preventDefault(); 
     $('#fileUploadSubmit').attr('value', 'Uploading'); 
     $('#fileUploadSubmit').fadeTo('fast',0.6); 
     $('#fileUploadLoadingBar').fadeIn('fast', function() { 
      alert('Finished'); 
     }); 

    }); 
}); 
+0

제안 해 주셔서 감사합니다. 그냥 시도했지만 불행히도 문제를 해결하지 못했습니다. 이 문제는 OSX 10.8에서만 발생하며, 시도한 모든 작업이 끝나면 OS 또는 Safari의 특정 빌드와 관련이 있을지도 모릅니다. –

+0

문제 없습니다 ... 이상합니다. Safari 6.0.2 (10.8.2)에서는 나에게 적합하지 않았지만 수정 사항을 적용했을 때 제대로 작동했습니다 ... 물론 양식을 제출하기 위해 추가 된 코드가 필요합니다. .click 대신 .submit을 사용하십시오.) 또는 다음 단계의 작업을 수행합니다. 그러나 실행되지 않는 메서드 (효과) 문제를 해결했습니다. – kevindeleon

+0

입력 유형을 "submit"에서 "button"으로 변경하면 jQuery도 의도 한대로 작동합니다. 그러나 여기에 비틀기가 있습니다. 일단'$ ('# fileUploadForm'). submit();을 함수 끝에 추가하면 양식이 제출되지만 문제는 되돌려지고 나머지 메소드는 작동하지 않습니다. 기묘한! –

0

.submit() evnet (클릭 대신)을 사용할 수 있습니다. $ ('form'). bind ('submit', function() {... Code ...});
하지만 파일을 업로드하려고하기 때문에 몇 가지 ajax 기법이나 jquery 플러그인을 사용하여 권하고 싶습니다.
아약스 (Google 사용)를 사용하여 파일을 업로드하는 방법에 대한 유용한 자습서가 많이 있습니다.
여기는 내가 좋아하는 Nettuts+ ajax file uploading입니다.

+0

고마워 ... 나는 그걸 시도했다. OSX 10.8의 Safari 6에서는 여전히 작동하지 않습니다. 나는 \t'$ ('#의 fileUploadForm')에 제 기능을 변경했습니다. ('제출'바인딩 기능() \t { \t \t $ ('#의 fileUploadSubmit'). ATTR ('값을' '업로드'); \t \t $ ('#의 fileUploadSubmit') fadeTo ('고속', 0.6). \t \t $ ('#의 fileUploadLoadingBar') fadeIn ('고속'). \t}); ' –

관련 문제