2016-06-16 8 views
0

Ich versuche derzeit jQuery zu verwenden, um eine Textarea oder eine Datei, die von einem Benutzer hochgeladen wurde, zu überprüfen. Die einzige Zeit, die es niemandem erlauben sollte, auf die nächste Seite zu gehen, ist, wenn sowohl textarea als auch die hochgeladene Datei isValid false ist.jQuery Validierung für Datei und Textbereich

Dies ist der Code, den ich

$(document).ready(function() { 
$('#nomination-submit').click(function (e) { 
    var fileValid = false; 
    var textValid = true; 
    $('textarea').each(function() { 
     if ($.trim($(this).val()) == '') { 
      textValid = false; 
      //binds to onchange event of your input field 
      $('file').bind('change', function() { 
       var ext = $('#file').val().split('.').pop().toLowerCase(); 
       if ($.inArray(ext, ['pdf', 'doc', 'docx', 'rtf', 'txt']) == -1) 
       { $('#fileExtension').slideDown("slow"); $('#fileSize').slideUp("slow"); fileValid = true; } else { 
        var filesize = (this.files[0].size); 
        if (filesize > 4194304) 
        { $('#fileSize').slideDown("slow"); fileValid = false; } else { fileValid = true; $('#fileSize').slideUp("slow"); } 
        $('#fileExtension').slideUp("slow"); $('#textOrFile').slideUp("slow"); 
       } 
      }) 
     } 
    }) 
    if (fileValid == false && textValid == false) { 
     e.preventDefault(); 
     { $('#textOrFile').slideDown("slow"); } 
    } 
}) }); 

haben, wenn ich es so haben es der Benutzer auf die nächste Seite, wo noch gehen zu lassen, wenn die Eingabe ungültig ist. Aus irgendeinem Grund, wenn ich dies mache oder eine verschachtelte if-Funktion, stellt es nicht sicher, dass beide nicht falsch sind, was der einzige Zeitpunkt ist, zu dem der Benutzer zur nächsten Seite gehen soll.

+0

Nur eine Beobachtung, aber sie binden nicht Ihre Änderungsereignis, bis sie versuchen, einreichen. Das ist vielleicht besser von der Submit-Veranstaltung getrennt? Auch '$ (' input [type = "file"] '). On (' change ', 'not' $ (' file ')' könnte effektiver sein. –

+0

@MarkSchultheiss Ursprünglich waren dies zwei getrennte Teile des Validierungscodes. Ich musste die beiden Teile Code zusammenführen und das war die Art und Weise, wie es in meinem Kopf Sinn machte.Andernfalls hätte ich es vor dem Absenden-Button, aber das schien nicht der richtige Ort, um es zu platzieren. – race155

Antwort

0

Erstellen Sie eine Trennung Ihrer Validierung von der Animation.

Angenommen, dieses Markup:

<input type="submit" value="submit me" id="nomination-submit" /> 
<input type="file" id="fileMe" /> 
<textarea></textarea> 
<textarea></textarea> 
<textarea></textarea> 
<textarea></textarea> 

Dieser Code:

$(document).ready(function() { 
    var validMinSize = 4194304; 
    var validTypes = ['pdf', 'doc', 'docx', 'rtf', 'txt']; 

    $('#nomination-submit').on('click submit', function(e) { 
    var fileValid = false; 
    var textValid = false; 
    var fileInput = $('#fileMe')[0]; 

    textValid = $('textarea').filter(function() { 
     return ($.trim($(this).val()) !== ''); 
    }).length == $('textarea').length; 

    var fileTypeValid = checkFileType(fileInput); 
    fileValid = fileTypeValid ? true : checkFileSize(fileInput); 
    var allInvalid = (!fileValid && !textValid); 
    if (allInvalid) { 
     e.preventDefault(); 
     $('#textOrFile').slideDown("slow"); 
    } 
    console.log("Check:" + fileTypeValid + ":" + fileValid + ":" + textValid + ":" + allInvalid); 
    }); 

    $('#fileMe').on('change', function() { 
    var fileInput = this; 
    if (checkFileType(fileInput)) { 
     $('#fileExtension').slideDown("slow"); 
     $('#fileSize').slideUp("slow"); 
    } else { 
     if (checkFileSize(fileInput)) { 
     $('#fileSize').slideDown("slow"); 
     } else { 
     $('#fileSize').slideUp("slow"); 
     } 
     $('#fileExtension').slideUp("slow"); 
     $('#textOrFile').slideUp("slow"); 
    } 
    }); 

    function checkFileType(fileInput) { 
    var fileValid = false; 
    var ext = fileInput.value.split('.').pop().toLowerCase(); 
    if (!(validTypes.indexOf(ext) === -1)) { 
     fileValid = true; 
    } 
    return fileValid; 
    } 

    function checkFileSize(fileInput) { 
    var fileValid = false; 
    fileValid = !!fileInput && !!fileInput.files[0] && !(fileInput.files[0].size <= validMinSize); 
    return fileValid; 
    } 
}); 

Fiddle mit dem überarbeiteten Code: https://jsfiddle.net/MarkSchultheiss/71Lufcf2/2/

+0

Es gibt mehrere Text zu validieren Boxen Leider muss ich dies vorher geklärt haben Ich brauche es, um die 4 Textbereiche zu validieren oder eine Datei hochzuladen – race155

+0

Dies läuft immer noch in dem gleichen Problem, das ich zuvor hatte Die Validierung wird nicht über die Validierung der Textfelder, damit ich mich nicht auf der Seite bewegen kann, wenn ich eine Datei hochlade – race155

+0

Einfach zu beheben: Die Prüfsumme wurde umgekehrt zu 'var textValid = false;', wenn ein beliebiger Textbereich ausgefüllt ist, true Du brauchst ALL Textarea um gefüllt zu sein, das ist eine kleine Änderung, aber das sollte ge Du hast angefangen. –

Verwandte Themen