Changeset 111461 in spip-zone


Ignore:
Timestamp:
Aug 29, 2018, 4:25:56 PM (8 months ago)
Author:
nicod@…
Message:

Intercepter le submit pour lancer la mise à jour en ajax
Principalement pour la recherche par mot clé : on saisit, on appuie sur entrée, et ça va vite :)

Location:
_plugins_/ajaxfiltre/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/ajaxfiltre/trunk/paquet.xml

    r111460 r111461  
    22        prefix="ajaxfiltre"
    33        categorie="outil"
    4         version="1.0.3"
     4        version="1.0.4"
    55        etat="stable"
    66        compatibilite="[3.1.0;3.2.*]"
  • _plugins_/ajaxfiltre/trunk/prive/javascript/ajaxfiltre_prive.js

    r110118 r111461  
    1010
    1111                        base.$el.find('select, input[type=checkbox], input[type=radio]').on('change', function() {
    12                                
    13                                 var formData = base.$el.serializeArray().reduce(function(obj, item) {
    14                                         // si le name comporte des [] on construit un tableau
    15                                         if(item.name.indexOf('[]') !== -1) {
    16                                                 var name = item.name.replace(/[\[\]]+/g, '');
    17                                                 if(!obj.hasOwnProperty(name)) {
    18                                                         obj[name] = [];
    19                                                 }
    20                                                 obj[name].push(item.value);
    21                                         } else {
    22                                                 obj[item.name] = item.value;
    23                                         }
    24                                         return obj;
    25                                 }, {});
    26 
    27                                 // passer une valeur vide explicite pour les checkbox dont le name comporte des [] et dans lesquels rien n'est coché
    28                                 var $checkradio = base.$el.find('input[type=checkbox][name*="[]"]');
    29                                 $.each($checkradio,function(){
    30                                         var checkRadioName = $(this).attr('name');
    31                                         // si rien n'est coché
    32                                         if(!base.$el.find('input[name="'+checkRadioName+'"]:checked').length){
    33                                                 // supprimer les données du nom avec []
    34                                                 delete formData[checkRadioName];
    35                                                 // ajouter un tableau vide sur le nom sans []
    36                                                 formData[checkRadioName.replace(/[\[\]]+/g, '')] = [];
    37                                         }
    38                                 });
    39                                
    40                                 console.log(formData);
    41                                
    42                                 ajaxReload(base.options.ajaxTarget, {args: formData});
     12                                base.query();
    4313                        });
    4414
     15                        base.$el.on('submit', function(e){
     16                                base.query();
     17                                e.preventDefault();
     18                        });
     19                };
     20
     21                base.query = function() {
     22                        var formData = base.$el.serializeArray().reduce(function(obj, item) {
     23                                // si le name comporte des [] on construit un tableau
     24                                if(item.name.indexOf('[]') !== -1) {
     25                                        var name = item.name.replace(/[\[\]]+/g, '');
     26                                        if(!obj.hasOwnProperty(name)) {
     27                                                obj[name] = [];
     28                                        }
     29                                        obj[name].push(item.value);
     30                                } else {
     31                                        obj[item.name] = item.value;
     32                                }
     33                                return obj;
     34                        }, {});
     35
     36                        // passer une valeur vide explicite pour les checkbox dont le name comporte des [] et dans lesquels rien n'est coché
     37                        var $checkradio = base.$el.find('input[type=checkbox][name*="[]"]');
     38                        $.each($checkradio,function(){
     39                                var checkRadioName = $(this).attr('name');
     40                                // si rien n'est coché
     41                                if(!base.$el.find('input[name="'+checkRadioName+'"]:checked').length){
     42                                        // supprimer les données du nom avec []
     43                                        delete formData[checkRadioName];
     44                                        // ajouter un tableau vide sur le nom sans []
     45                                        formData[checkRadioName.replace(/[\[\]]+/g, '')] = [];
     46                                }
     47                        });
     48
     49                        // recharger la liste d'objets
     50                        ajaxReload(base.options.ajaxTarget, {args: formData});
    4551                };
    4652
     
    6167
    6268$(function() {
    63 
    64         $('.formulaire_navigation_filtre form').ajaxFiltre({ajaxTarget: 'liste-objets'});
    65 
     69        $('.formulaire_navigation_filtre form').ajaxFiltre();
    6670});
Note: See TracChangeset for help on using the changeset viewer.