отключить кнопку отправки, пока файл не будет выбран для загрузки - PullRequest
23 голосов
/ 30 октября 2010

У меня есть форма для загрузки изображений.Я хочу отключить кнопку отправки, пока пользователь не выберет изображение для загрузки.Я хотел бы сделать это с помощью jQuery.В настоящее время у меня есть JavaScript, который запрещает пользователю отправлять форму более одного раза, отключив ее при отправке.Было бы неплохо совместить эту функциональность с новой.

Вот что я получил сейчас:

<script type="text/javascript">
function submitonce(theform) {
    //if IE 4+ or NS 6+
    if (document.all || document.getElementById) {
        //screen thru every element in the form, and hunt down "submit" and "reset"
        for (i = 0; i < theform.length; i++) {
            var tempobj = theform.elements[i]
            if (tempobj.type.toLowerCase() == "submit" || tempobj.type.toLowerCase() == "reset")
            //disable em
            tempobj.disabled = true
        }
    }
}
</script>
<form name="form" enctype="multipart/form-data" method="post" action="upload.php" onSubmit="submitonce(this)">
 <input type="file" name="my_field" value="" />
 <input type="submit">
</form>

Ответы [ 5 ]

45 голосов
/ 30 октября 2010

В Chrome и Firefox надежно работает следующее (Ubuntu 10.10), на данный момент я не могу проверить на других платформах:

jQuery

$(document).ready(
    function(){
        $('input:file').change(
            function(){
                if ($(this).val()) {
                    $('input:submit').attr('disabled',false);
                    // or, as has been pointed out elsewhere:
                    // $('input:submit').removeAttr('disabled'); 
                } 
            }
            );
    });

html

<form action="#" method="post">
    <input type="file" name="fileInput" id="fileInput" />
    <input type="submit" value="submit" disabled />
</form>
<div id="result"></div>

Демонстрация на JS Fiddle .

17 голосов
/ 13 августа 2013

Немного более простой способ использования prop (), который, я думаю, является предпочтительным для этого:

$('input:file').on("change", function() {
    $('input:submit').prop('disabled', !$(this).val()); 
});

Протестировано в IE, Chrome и FireFox.

4 голосов
/ 30 октября 2010

Попробуйте

   $('#my_uploader').change(function() {
      if($(this).val()) {
        $('#my_submit_button').attr('disabled', '');
      } else {
        $('#my_submit_button').attr('disabled', 'disabled');
      }
    });
1 голос
/ 29 ноября 2016

Если вы поклонник троичных выражений:

$(document).ready(function(){
    var $submit = $('#submit_document');
    var $file = $('#file_path');

    $file.change(
        function(){
            $submit.attr('disabled',($(this).val() ? false : true));
        }
    );
});  
0 голосов
/ 04 июля 2018

Вместо того, чтобы отключить отправку, потенциально более полезно предложить инструкцию, если пользователь нажимает ее, не выбрав файл сначала? Итак, добавьте что-то вроде этого в качестве кода отправки для отправки?

var bFileEmpty = !document.getElementById('filControl').value; if (bFileEmpty) alert('Please select a file'); return !bFileEmpty;

Обратите внимание, что вашему файловому элементу управления потребуется идентификатор и имя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...