2010-12-12 2 views
2

У меня есть страница загрузки файла HTML, и мне нужно, чтобы кнопка отправки была отключена до тех пор, пока не будет выбран файл. Затем кнопка отправки будет включена и пользователь может загрузить. Я предполагаю, что я могу использовать код jQuery для запроса значения поля загрузки файла, чтобы узнать, был ли выбран файл для загрузки. И я предполагаю, что могу проверить, что всякий раз, когда фокус покидает поле загрузки файла. Меня беспокоит то, что некоторые браузеры могут смеяться с этим, а затем мои пользователи не могут загружать файлы.Как отключить кнопку отправки до тех пор, пока не будет выбран файл

Есть ли безопасный способ сделать это, желательно с помощью jQuery, где мне не грозит опасность загрузки некоторых пользователей?

ответ

5

Этот jQuery должен работать и привязан к событию change() ввода файла. Этот код также применяет атрибут disabled так, в случае, если пользователь JavaScript отключен, он не должен мешать форму используется:

$(document).ready(
    function(){ 
     $('input:submit').attr('disabled',true); 
     $('input:file').change(
      function(){ 
       if ($(this).val()){ 
        $('input:submit').removeAttr('disabled'); 
       } 
       else { 
        $('input:submit').attr('disabled',true); 
       } 
      }); 
    }); 

JS Fiddle demo.

+0

Похоже, он должен работать. Хотя я все еще немного боюсь проблем с браузером, из-за чего некоторые пользователи не могут загрузить, думаю, мне просто нужно провести тщательное тестирование. Это был отключенный JavaScript, о котором я беспокоился, это были особенности JavaScript, о которых я беспокоился. –

5

Проще всего проверить поле файла, когда пользователь действительно отправляет форму ... таким образом вам не придется искать изменения формы.

$(function() { 
    $('form').submit(function() { 
     if(!$("form input[type=file]").val()) { 
     alert('You must select a file!'); 
     return false; 
     } 
    }); 
}); 

Этот код Unobtrusive JavaScript и не испортит форму, если пользователь не поддерживает JS.

+0

Это может быть «ненавязчивым» в смысле страницы Википедии, но бросать блокировки оповещения всплывающих окон в лице пользователя очень навязчивый. – adamse

+1

И, на мой взгляд, позволить пользователю попробовать и отправить форму до того, как условия подачи будут выполнены, в лучшем случае расстраивает. –

0

код Дэвид Томас может быть установлен на кнопку ID:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#<%=btInsert.ClientID %>').attr('disabled', true); 
     $('input:file').change(
      function() { 
       if ($(this).val()) { 
        $('#<%=btInsert.ClientID %>').removeAttr('disabled'); 
       } 
       else { 
        $('#<%=btInsert.ClientID %>').attr('disabled', true); 
       } 
      }); 
    }); 
</script>