Методы jQuery не работают в Safari 6

Выдернуть мои волосы. Простые методы jQuery не работают в Safari 6.

Следующий блок кода работает во всех других браузерах, которые я тестировал, кроме Safari 6. Он отлично работает в Safari 5 и старше, отлично в Firefox, отлично в IE. Он также отлично работает в Chrome.

Предупреждение появляется в Safari 6, поэтому функция все еще срабатывает, но ничего не происходит ни с одним из трех других методов.

----- ОБНОВЛЕНИЕ ----- После дальнейшего тестирования на нескольких машинах... Я обнаружил, что он не работает только в Safari 6 в Mac OSX 10.8. Код прекрасно работает в той же версии Safari в OSX 10.7. --------------------

Я использую 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;
}

JavaScript:

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

2 ответа

Я могу ошибаться, но я думаю, что ваша проблема в том, что форма отправляется до запуска вашего javascript. Вам может понадобиться использовать protectDefault, чтобы этого не произошло. Вы также можете изменить свою кнопку с кнопки отправки на кнопку type="button", и это также может помочь. Упс... быстрое редактирование... Я также поместил ваше оповещение в функцию обратного вызова, чтобы она работала после того, как произошло fadeIN... вы можете оставить это или изменить его.

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

    });
});

Вы можете использовать.submit() evnet (вместо щелчка). $('Форма') связывания ('Submit', функция (){... код...}).
Но поскольку вы пытаетесь загрузить файл, я бы порекомендовал использовать некоторые методы ajax или плагин jquery.
Есть много хороших руководств по загрузке файлов с использованием ajax (используйте Google)
И вот одна из загрузок Nettuts+ ajax, которая мне нравится.

Другие вопросы по тегам