2013-07-15 13 views
13

chcę zrobić (HTML) elementu input 'plik' obowiązkowe: coś podobnegoMaking 'Plik' obowiązkowe (wymagane)

<input type='file' required = 'required' .../> 

Ale to nie działa.

Zobaczyłem ten podręcznik WW3, który stwierdza, że ​​"wymagany" atrybut jest nowy w HTML 5. Ale nie używam HTML 5 w projekcie, który pracuję, który nie obsługuje nowej funkcji.

Każdy pomysł?

+0

Musisz JavaScript. –

+0

@ javascriptUvasha opcja javascript jest również dobra. Proszę powiedzieć. – Bere

+0

Podaj więcej pliku HTML. Zakładam, że masz gdzieś przycisk do przesłania? Dołącz funkcję javascript, która zapewnia, czy pole wejściowe pliku jest puste, czy nie, a jeśli puste, zwróć komunikat o błędzie. – Tro

Odpowiedz

8

Można to zrobić przy użyciu jQuery tak: -

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#upload').bind("click",function() 
    { 
     var imgVal = $('#uploadfile').val(); 
     if(imgVal=='') 
     { 
      alert("empty input file"); 
      return false; 
     } 


    }); 
}); 
</script> 

<input type="file" name="image" id="uploadfile" size="30" /> 
<input type="submit" name="upload" id="upload" class="send_upload" value="upload" /> 
+0

Dzięki. Ale forma jest złożona. Chcę, aby moje rozwiązanie było tak niezależne od jakiegokolwiek innego elementu (formy), jak to tylko możliwe.Nie chcę używać (wiązać) przycisku "wyślij" (ani żadnego z jego atrybutów). Czy jest jakiś inny sposób? – Bere

+0

Czy możesz opublikować strukturę formularza? –

+0

Elementy i ich atrybuty są zdefiniowane w pliku XML Joomla. Nazwy elementów formularzy i identyfikatory są zmieniane/manipulowane przez CMS przed wyświetleniem. Obawiam się, że jeśli ktoś zmieni nazwę odnośnego elementu formularza w XML, może zostać wygenerowana zupełnie inna para nazwa/id. W rezultacie mogę utracić połączenie. Przynajmniej chcę, aby element stał się niezależny od konkretnego polegania na innym elemencie formularza. – Bere

3
var imgVal = $('[type=file]').val(); 

podobne do sugestii Vivek, ale teraz mają bardziej ogólny selektor pliku wejściowego, a nie opierać się na konkretnym ID lub klasa.

See this demo.

+1

To nie jest tak naprawdę odpowiedź na pytanie. – Pere

3

Możesz utworzyć polyfill, który zostanie wykonany na formularzu submit. Na przykład:

/* Attach the form event when jQuery loads. */ 
$(document).ready(function(e){ 

/* Handle any form's submit event. */ 
    $("form").submit(function(e){ 

     e.preventDefault();     /* Stop the form from submitting immediately. */ 
     var continueInvoke = true;   /* Variable used to avoid $(this) scope confusion with .each() function. */ 

     /* Loop through each form element that has the required="" attribute. */ 
     $("form input[required]").each(function(){ 

      /* If the element has no value. */ 
      if($(this).val() == ""){ 
       continueInvoke = false;  /* Set the variable to false, to indicate that the form should not be submited. */ 
      } 

     }); 

     /* Read the variable. Detect any items with no value. */ 
     if(continueInvoke == true){ 
      $(this).submit();    /* Submit the form. */ 
     } 

    }); 

}); 

Ten skrypt czeka formularz należy złożyć, a następnie pętli choć każdy element formularza, który ma atrybut required ma wprowadzoną wartość. Jeśli wszystko ma wartość, przesyła formularz.

Przykładem elementów podlegających kontroli mogą być:

<input type="file" name="file_input" required="true" /> 

(można usunąć komentarzach & Minify tego kodu przy użyciu go na swojej stronie internetowej)

2

jak na razie w 2017 roku, jestem w stanie Aby to zrobić -

<input type='file' required /> 

i po przesłaniu formularza prosi o plik. Screenshot on Google Chrome

+0

Podoba mi się ten pomysł, ale nie ma to żadnego wpływu w moim przypadku (formularz w Laravel). Niestety:/ – daneczech

+0

@daneczech prawdopodobnie nie owijacie go znacznikiem '

' w twoim 'html' – Ibo

1

Dzięki HTML5, to jest tak proste, jak to:

<input type='file' required /> 

Przykład:

<form> 
 
    <input type='file' required /> 
 
    <button type="submit"> Submit </button> 
 
</form>

Powiązane problemy