2010-09-14 8 views
0

J'ai un formulaire avec trop de champs. Ce que j'essaie de faire, c'est d'abord faire une validation en utilisant jquery; ce qui fonctionne bien jusqu'à présent. J'ai un gestionnaire d'événements "onclik" qui valide le type de fichier qui a été téléchargé par les utilisateurs, et si le fichier n'est pas une image montre un message à l'utilisateur. Si le fichier est bon, il devrait envoyer des données au serveur et attendre la réponse. Jusqu'à présent, tout fonctionne bien pour moi, mais l'ajax ne fonctionne pas. S'il vous plaît me donner la main Voici mon code:onclick valider le type de fichier, si le fichier est bon envoyer des données au serveur

$(document).ready(function(){ 
    //$(\'#saveData\').bind(\'click\', function() { 
    //$(\'#saveData\').live(\'click\', function() { 
    $(\'#saveData\').click(function(){ 
    var ext = $("#articlePhoto").val().split(".").pop().toLowerCase(); 
    var allow = new Array("gif","png","jpg","jpeg",""); 
    if(jQuery.inArray(ext, allow) == -1) { 
    $("div.fileType").html("some error message"); 
    $("div.fileType").attr("tabindex",-1).focus(); 
    return false; 
    } 
    else 
    { 
    $.ajax({ 
     type: "POST", 
     url: url+"somefile.php", 
     data: "item1=somedata&item2=others", 
     success: function(data){ 
     alert(data); // doesn't work 
     } 
    }); 
    } 
    }); 
}); 

Merci

Répondre

1

Vous ne pouvez pas vérifier de manière fiable le type d'un fichier à partir de son nom de fichier. Les machines Mac et Linux ont d'autres mécanismes pour déterminer le type de fichier que l'extension, et même sous Windows, vous n'avez pas accès au mappage de l'extension de fichier vers le type. S'il peut être approprié d'imprimer un avertissement si vous ne reconnaissez pas le type de fichier depuis son extension (par exemple, apparaître sur le champ de téléchargement de fichier), vous ne devez pas bloquer les téléchargements lorsque cela se produit.

Autre que cela, l'appel ajax() devrait fonctionner, cependant:

  • vous avez des antislashs errants (je suppose une faute de frappe copier-coller);
  • vous ne renvoyez pas false au démarrage de la demande ajax(). Si #saveData est un bouton d'envoi de formulaire, cela signifie que le formulaire sera toujours envoyé au clic, et que la navigation annulerait l'appel ajax();
  • Je ne sais pas vraiment ce que cela est censé faire:

    $("div.fileType").attr("tabindex",-1).focus(); 
    

    tabindexes négatifs sont une extension IE non standard; Pourquoi voulez-vous supprimer le champ de la séquence de tabulation?

Si ce n'est pas, ajoutez un error: function() { ... } aux arguments de vérifier l'appel est en fait quelque chose de fonctionnel retourne, et vérifier la console JS pour les erreurs en général.

+0

Merci bobince pour votre réponse, – webo

+0

J'ai essayé d'utiliser l'erreur: fonction et n'a rien retourné. La raison pour laquelle j'utilise $ ("div.fileType"). Attr ("tabindex", - 1) .focus(); est de se concentrer sur la div "fileType". Depuis la mise au point ne fonctionne pas avec les divs. En passant, j'ai obtenu cette ligne de code du site Web de jquery. Toute autre suggestion sera appréciée. merci – webo

+0

Mettez un cas de test reproductible quelque part? Il n'y a pas de problème particulier avec l'appel 'ajax' lui-même, mais il semble qu'il nous manque du code (par exemple, d'où vient' url'?). Concentrer une div semble un peu vide de sens, pourquoi ne pas se concentrer sur le champ lui-même? – bobince

Questions connexes