Maison  >  Article  >  interface Web  >  Résumé des compétences de téléchargement de fichiers basées sur Ajax HTML

Résumé des compétences de téléchargement de fichiers basées sur Ajax HTML

亚连
亚连original
2018-05-23 14:26:091321parcourir

Cet article résume principalement en détail les techniques de téléchargement de fichiers basées sur ajax html. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

Citation : Comme nous le savons tous, le téléchargement de fichiers en html n'en nécessite qu'un. input, tapez=file et c'est fait. Cependant, le style de cette étiquette ne vaut vraiment pas la peine d'être mentionné. Il est probablement difficile de changer de style. Mais c’est en fait assez simple. Parlons aujourd’hui de quelques conseils pour télécharger des fichiers !

1. Comment personnaliser le style ?
1) Définissez-le simplement en fonction du style que vous aimez voir, tel que abc3a7c0b41fd564e3345b8481f574fb5db79b134e9f6b82c0b36e0489ee08ed, cela peut être L'effet d'image de fond peut être une instruction textuelle. Bref, vous pouvez le modifier comme vous le souhaitez ! Avec le bouton, un conteneur de nom de fichier est également nécessaire pour stocker le nom lors de la sélection du fichier à télécharger, afin d'éviter que le téléchargement ne paraisse ennuyeux et difficile à comprendre.

2), ajoutez le contrôle de fichier qui doit vraiment être téléchargé et définissez l'attribut display:none tel que 4d2ffc44994b3a0ff1e24e31262c1a07, de sorte qu'il est un véritable emplacement de fichiers téléchargés. On peut donc dire que la beauté de l'interface de téléchargement de fichiers dépend de votre imagination !

2. Comment déclencher un événement ?

C'est un point important. Le point de déclenchement doit être le style que vous avez écrit, mais l'élément qui fonctionne vraiment est masqué, mais cela n'affecte pas son effet de clic. Il vous suffit de déclencher un Just. cliquez sur l'événement, tel que $('#target-file').trigger('click');

3. Sélectionner plusieurs fichiers ?

Pour télécharger plusieurs fichiers, utilisez simplement multiple=true d'un fichier en HTML. Bien sûr, vous pouvez également choisir un contrôle de téléchargement tiers, tel que swfupload. L'effet est vraiment bon, mais. pour ceux qui ne veulent pas Si vous utilisez le plug-in, cela ne fonctionnera pas.                                                                                                       

L'embellissement de l'interface peut en fait utiliser des plug-ins tels que jqueryui ; Si vous souhaitez effectuer des interactions amicales, la technologie ajax sera utilisée, pas de commutation d'actualisation, de téléchargement asynchrone, de soumission et enfin , en fait, le chemin d'ajax Il peut également être conservé. Utilisez pushState et replaceState pour implémenter pjax.

Vérification du formulaire : validform.js

Soumission de fichier asynchrone : jquery.form.js
Pop-up convivial. invite : layer.js


5. Des problèmes de compatibilité ?

La chose la plus redoutée et la plus importante lors du travail d'interface est le problème de compatibilité entre les différents navigateurs. Voici les principaux points de référence :

tableau La largeur est gérée de manière incohérente sélectionnez, les hauteurs d'affichage des entrées sont incohérentes ;

les fenêtres contextuelles d'alerte sont incohérentes


...

6. Code de démonstration

J'ai compilé ce qui précède pour vous, j'espère que cela vous sera utile à l'avenir.

Articles connexes :
<a href="javascript:;" up-type-id="1" class="btn btn-default small-btn switch-upload-method"><span>本地上传</span></a>
<a href="javascript:;" up-type-id="2" class="upload-file-instead btn btn-default small-btn switch-upload-method"><span>打包工具</span></a>
<input type="file" name="apkFiles[]" id="local-upload-real-file" class="upload-file-real hide" response-id="local-upload-container" multiple=&#39;true&#39; />
<input type="file" name="apkToolFiles[]" id="apk-tool-real-file" class="upload-file-real hide" response-id="apk-tool-container-textarea" />
<script>
 $(function(){
  var alertTitle = &#39;系统提示:&#39;;
  var submitId = &#39;#do-submit&#39;;
  $(&#39;#taskForm&#39;).Validform({
   btnSubmit: submitId,
   tiptype: 1,
   ignoreHidden: true,
   dragonfly: false,
   tipSweep: true,
   label: ".label",
   showAllError: false,
   postonce: true,
   ajaxPost: true,
   datatype:{
   },
   beforeCheck:function(curform){
   },
   beforeSubmit:function(curform){
    $(&#39;.upload-file-real&#39;).attr(&#39;disabled&#39;, &#39;disabled&#39;);
    $(submitId).attr(&#39;disabled&#39;, &#39;disabled&#39;); //提交前禁用按钮
    ajaxSubmitForm(curform);
    $(submitId).removeAttr(&#39;disabled&#39;);   //失败后恢复可提交
    return false;
   },
   submitForm: function(){}      //不再起作用
  });

  //切换上传方法
  $(&#39;.switch-upload-method&#39;).off().on(&#39;click&#39;, function(){
//   $(submitId).attr(&#39;disabled&#39;, &#39;disabled&#39;);
   var pObj = $(this).parent().find(&#39;.switch-upload-method&#39;);
   var index = pObj.index(this);
   var uploadTypeId = $(&#39;#upload-type-id&#39;).val();      //上传方式:1:打包工具;2:本地上传,0:没有上传方式
   var uploadType = $(this).attr(&#39;up-type-id&#39;);
   if(parseInt($(&#39;#sub-channel-count&#39;).html()) > 0){
    if(uploadTypeId != uploadType){
     layer.alert(&#39;还有子渠道包数据,不能完成切换,请先确认清除再切换!&#39;);
     return false;
    }
   }
   pObj.not(&#39;:eq(&#39; + index + &#39;)&#39;).removeClass(&#39;btn-danger&#39;).addClass(&#39;btn-default&#39;);
   pObj.eq(index).removeClass(&#39;btn-default&#39;).addClass(&#39;btn-danger&#39;);
   if(uploadType == 36){    //local-upload
    $(&#39;#upload-type-id&#39;).val(uploadType);
    $(&#39;#init-apk-container&#39;).show();
    $(&#39;#apk-tool-container&#39;).hide();
    $(&#39;#upload-main-control&#39;).find(&#39;.del-it-main&#39;).css({display: &#39;inline-block&#39;});
    $(&#39;#local-upload-real-file&#39;).trigger(&#39;click&#39;);
   }else if(uploadType == 35){   //apk-tool
    $(&#39;#upload-type-id&#39;).val(uploadType);
    $(&#39;#init-apk-container&#39;).hide();
    $(&#39;#local-upload-container&#39;).hide();
    $(&#39;#upload-main-control&#39;).find(&#39;.del-it-main&#39;).hide();
    $(&#39;#apk-tool-container&#39;).show();
   }
  });
  //本地上传
  $(&#39;#local-upload-real-file&#39;).off().on(&#39;change&#39;, function(){
   if(!$(this).val()){
    return false;
   }
   file_size = 0;
   filepath = $(this).val();
   maxFileSize = 30 * 1024 * 1024;
   var browserCfg = {};
   var ua = window.navigator.userAgent;
   if (ua.indexOf("MSIE") >=1 ){
    browserCfg.ie = true;
   }else if(ua.indexOf("Firefox") >=1 ){
    browserCfg.firefox = true;
   }else if(ua.indexOf("Chrome") >=1 ){
    browserCfg.chrome = true;
   }
   if (browserCfg.ie) {
    var img = new Image();
    img.src = filepath;
    file_size = img.fileSize;
    while (true) {
     if (img.fileSize > 0) {
      if (img.fileSize > maxFileSize) {
       alert("上传包超过30MB限制,请使用打包工具上传!");
       return false;
      }
      break;
     }
    }
   } else {
    file_size = this.files[0].size;
    if (file_size > maxFileSize) {
     alert("上传包超过30MB限制,请使用打包工具上传!");
     return false;
    }
   }

   var responseObjId = $(this).attr(&#39;response-id&#39;);
   var responseObj = $(&#39;#&#39; + responseObjId);
   $(&#39;#taskForm&#39;).ajaxSubmit({
    url:&#39;/aa/bb/uploadTmpApk&#39;,
    resetForm: false,
    dataType: &#39;json&#39;,
    beforeSubmit: function(option){
     window.loading = layer.load(2);
    },
    success: function(data, statusText){
     layer.close(window.loading);
     if(data.status == 1){
      $(&#39;#version-identifier&#39;).val(data.version);
      responseObj.html(data.apkInfoHtml);
      responseObj.show();
      var delObj = $(&#39;#upload-main-control&#39;).find(&#39;.del-it-main&#39;);
      delObj.css({&#39;display&#39;: &#39;inline-block&#39;});
      $(&#39;#sub-channel-count&#39;).html(data.apkTotal);
      $(&#39;#init-apk-container&#39;).hide();
      $(submitId).removeAttr(&#39;disabled&#39;);
     }else{
      layer.alert(data.info, {title: alertTitle});
     }
    },
    error: function(data){
     layer.close(window.loading);
     layer.alert(&#39;未知错误,请稍后再试!&#39;);
    }
   });
   return false;//防止dialog 自动关闭
  });
  //打包工具
  $(&#39;#apk-tool-real-file&#39;).off().on(&#39;change&#39;, function(){
   if(!$(this).val()){
    return false;
   }
   var responseObjId = $(this).attr(&#39;response-id&#39;);
   var responseObj = $(&#39;#&#39; + responseObjId);
   $(&#39;#Form&#39;).ajaxSubmit({
    url:&#39;/aa/bb/uploadTmpApkTool&#39;,
    resetForm: false,
    dataType: &#39;json&#39;,
    beforeSubmit: function(option){
     window.loading = layer.load(2);
    },
    success: function(data, statusText){
     layer.close(window.loading);
     if(data.status == 1){
      $(&#39;#version-identifier&#39;).val(data.version);
      responseObj.html(data.infoHtml);
      var parentContainer = responseObj.parent().parent(),
       nameContainer = parentContainer.find(&#39;.apk-name-container&#39;),
        delObj = parentContainer.find(&#39;.del-it-apk-tool&#39;);
      nameContainer.html(data.apkName);
      nameContainer.attr(&#39;title&#39;, data.apkName);
      $(&#39;#apk-tool-file-tmp&#39;).html(data.fileInfo);
      $(submitId).removeAttr(&#39;disabled&#39;);
     }else{
      layer.alert(data.info, {title: alertTitle});
     }
    },
    error: function(data){
     layer.close(window.loading);
     layer.alert(&#39;未知错误,请稍后再试!&#39;);
    }
   });
   return false;//防止dialog 自动关闭
  });
  $(&#39;.apk-tool-upload-button&#39;).on(&#39;click&#39;, function(){
   $(&#39;#apk-tool-real-file&#39;).trigger(&#39;click&#39;);
  });
 });
</script>

Un exemple simple d'utilisation de XPath dans dom4j

Une brève discussion sur la sélection de plage de dates DatePicker de Bootstrap

Un exemple simple d'utilisation d'AJAX pour implémenter la connexion à la page et la vérification du nom d'utilisateur enregistré

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn