2012-12-17 26 views
7

Wyciągając moje włosy. Proste metody jQuery nie działają w Safari 6.Metody jQuery nie działają w Safari 6

Poniższy blok kodu działa we wszystkich innych przeglądarkach, które przetestowałem z wyjątkiem Safari 6. Działa dobrze w Safari 5 i starszych, dobrze w Firefoksie, dobrze w IE. Działa również dobrze w Chrome.

Alert jest wyskakujący w Safari 6, więc funkcja nadal jest uruchamiana, ale nic nie dzieje się z żadną z pozostałych 3 metod.

----- AKTUALIZACJA ----- Po dalszych testach na kilku komputerach ... Odkryłem, że działa tylko w Safari 6 w Mac OSX 10.8. Kod działa poprawnie w tej samej wersji Safari w OSX 10.7. --------------------

Używam jQuery 1.8.3. a moja strona sprawdza się jako 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

Czy pojawił się błąd? –

+0

Jedyną dziwną rzeczą, jaką widzę w tych wierszach, jest '$ (...). Attr ('value', 'Uploading');'. Zwykle używałbyś '$ (...). Val ('Uploading');' (lub mógłbyś użyć 'prop'). Ale założę się, że 'attr' tak działa i, w każdym razie, to nie wyjaśnia zaników ... –

+1

Miło jest zobaczyć ** zadane pytanie ** od nowego członka SO. Niezłe! –

Odpowiedz

1

mogę się mylić, ale myślę, że problem jest forma jest złożenie przed JavaScript jest bieganie. Być może będziesz musiał użyć preventDefault, aby temu zapobiec. Możesz również zmienić przycisk z przycisku przesyłania na przycisk = "przycisk", co również może pomóc. Ups ... szybka edycja ... Wpisuję również twoje powiadomienie w oddzwanianie, aby działało po tym, jak fadeIN się wydarzyło ... możesz to zostawić lub zmienić.

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

Dzięki za sugestię. Wypróbowałem to i niestety to nie rozwiązało problemu. Ponieważ tak się dzieje tylko w OSX 10.8, a po wszystkim, co wypróbowałem, zaczynam myśleć, że może to ma coś wspólnego z systemem operacyjnym lub tą specyficzną wersją Safari? –

+0

nie ma problemu ... to dziwne. W przeglądarce Safari 6.0.2 (10.8.2) nie działało to również, ale z wprowadzonymi przeze mnie modyfikacjami działało dobrze ... oczywiście do dodania formularza musi być trochę więcej kodu (lub użyj .submit zamiast .click) lub wykonaj co dalej w tym kroku, ale to naprawiło problem z niedziałającymi metodami (efektami). – kevindeleon

+0

Jeśli zmienię typ wejścia z "submit" na "button", to mój jQuery działa również zgodnie z przeznaczeniem. Ale oto zwrot. Po dodaniu '$ ('# fileUploadForm'). Submit();' do końca mojej funkcji, formularz zostanie teraz przesłany ... ale problem powraca i pozostałe metody nie działają. DZIWNE! –

0

Można użyć .submit() evnet (Zamiast kliknięcia). $ ('formularz'). bind ('submit', function() {... Code ...});
Ale ponieważ próbujesz przesłać plik, polecam za pomocą niektórych technik ajaxowych lub wtyczki jquery.
Istnieje wiele miłych tutoriali na temat przesyłania plików za pomocą ajax (Użyj google)
A oto jeden z Nettuts+ ajax file uploading, który lubię.

+0

Dzięki ... Spróbowałem. Nadal nie działa w Safari 6 w OSX 10.8. ja zmieniłem funkcję \t '$ ('# fileUploadForm'). Bind ('submit', function() { \t \t \t $ ('# fileUploadSubmit'). Attr ('value', 'Przekazywanie'); \t \t $ ('# fileUploadSubmit') fadeTo ('szybki', 0,6);. \t \t $ ('# fileUploadLoadingBar') fadeIn ('fast');. \t}); ' –

Powiązane problemy