2012-12-17 48 views
7

Kéo tóc ra. Các phương thức jQuery đơn giản không hoạt động trong Safari 6.Phương pháp jQuery không hoạt động trong Safari 6

Khối mã sau hoạt động trong tất cả các trình duyệt khác mà tôi đã thử nghiệm ngoại trừ Safari 6. Nó hoạt động tốt trong Safari 5 trở lên, tốt trong Firefox, tốt trong IE. Nó cũng hoạt động tốt trong Chrome.

Cảnh báo không bật lên trong Safari 6, do đó chức năng vẫn được kích hoạt nhưng không có gì xảy ra với bất kỳ phương pháp nào trong số 3 phương pháp khác.

----- UPDATE ----- Sau khi thử nghiệm thêm trên một số máy ... Tôi đã phát hiện thấy nó không hoạt động trong Safari 6 trong Mac OSX 10.8. Mã hoạt động tốt trong cùng một phiên bản của Safari trong OSX 10.7. --------------------

Tôi đang chạy jQuery 1.8.3. và trang của tôi xác nhận là 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; 
} 

JavaScript:

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

Bạn có gặp bất kỳ lỗi nào không? –

+0

Điều kỳ lạ duy nhất tôi thấy trong những dòng này là '$ (...). Attr ('value', 'Uploading');'. Thông thường bạn sẽ sử dụng '$ (...). Val ('Tải lên');' (hoặc bạn có thể sử dụng 'prop'). Nhưng tôi đặt cược 'attr' làm việc dù sao, và trong mọi trường hợp, điều đó không giải thích sự mất dần ... –

+1

Thật tuyệt khi thấy một câu hỏi ** được hỏi ** từ một thành viên SO mới. Đẹp nhất! –

Trả lời

1

Tôi có thể sai, nhưng tôi nghĩ rằng vấn đề của bạn là hình thức được nộp trước khi javascript của bạn là đang chạy. Bạn có thể cần phải sử dụng preventDefault để tránh điều đó xảy ra. Bạn cũng có thể thay đổi nút của bạn từ một nút gửi đến một loại = "nút" và điều đó có thể giúp đỡ là tốt. Rất tiếc ... chỉnh sửa nhanh .. Tôi cũng đặt cảnh báo của bạn trong một cuộc gọi lại để nó sẽ chạy sau khi fadeIN đã xảy ra ... bạn có thể để lại điều đó hoặc thay đổi nó.

$(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

Cảm ơn bạn đã đề xuất. Chỉ cần thử nó và tiếc là nó đã không khắc phục được vấn đề. Vì điều này chỉ xảy ra trong OSX 10.8, và sau tất cả mọi thứ tôi đã thử, tôi bắt đầu nghĩ rằng có lẽ điều này có liên quan đến hệ điều hành hoặc công cụ xây dựng Safari cụ thể này? –

+0

không có vấn đề gì ... điều đó thật lạ. Nó không hoạt động với tôi trong Safari 6.0.2 (10.8.2), nhưng với những sửa đổi tôi đã thực hiện, nó hoạt động tốt ... tất nhiên cần phải thêm một chút mã để gửi biểu mẫu (hoặc sử dụng .submit thay vì .click), hoặc làm bất cứ điều gì là tiếp theo trong bước, nhưng điều đó đã khắc phục được vấn đề của các phương thức (hiệu ứng) không chạy. – kevindeleon

+0

Nếu tôi thay đổi loại đầu vào từ "gửi" sang "nút" thì jQuery của tôi cũng hoạt động như dự định. Nhưng đây là bước ngoặt. Khi tôi thêm '$ ('# fileUploadForm'). Submit();' vào cuối hàm của tôi, biểu mẫu sẽ gửi ... nhưng sự cố đã trở lại và các phương thức còn lại không hoạt động. KỲ DỊ! –

0

Bạn có thể sử dụng .submit() evnet (Thay vì nhấp). $ ('form'). bind ('submit', function() {... Code ...});
Nhưng vì bạn đang cố tải tệp lên, tôi khuyên bạn nên sử dụng một số kỹ thuật ajax và plugin jquery.
Có rất nhiều hướng dẫn hay về cách tải lên tệp bằng ajax (Sử dụng google)
Và đây là một số từ Nettuts+ ajax file uploading mà tôi thích.

+0

Cảm ơn ... Tôi đã thử một lần. Nó vẫn không hoạt động trong Safari 6 trong OSX 10.8. Tôi đã thay đổi chức năng của tôi để \t '$ ('# fileUploadForm'). Bind ('submit', function() { \t \t \t $ ('# fileUploadSubmit'). Attr ('giá trị', 'Tải lên'); \t \t $ ('# fileUploadSubmit') fadeTo ('nhanh', 0,6);. \t \t $ ('# fileUploadLoadingBar') fadeIn ('nhanh');. \t}); ' –

Các vấn đề liên quan