2014-07-20 3 views
2

J'ai un formulaire avec Gravity Forms dans WordPress, ce formulaire a 2 datepickers: Date d'arrivée et date de départ, mais je veux que lorsque le client sélectionne une date dans la date de check-in, automatiquement la date de départ mise à jour avec un jour après la date d'arrivée, donc, ce que j'ai fait sans résultat:Dates de début et de fin avec Datepicker jQuery et Gravity Forms

D'abord j'ai ajouté une fonction dans mon functions.php de mon thème :

/** 
* Gravity Forms Datepicker Changes 
*/ 
function my_scripts_method() { 
    wp_register_script('my-js-file', 
     get_template_directory_uri() . '/js/my-js.js', 
     array('jquery'), 
     '1.0', 
     false); 

    wp_enqueue_script('my-js-file'); 
} 

add_action('wp_enqueue_scripts', 'my_scripts_method'); 

Puis je crée un dossier dans mon thème appelé /js et aussi je crée un fichier appelé my-js.js , Dans lequel j'ai ce code:

jQuery.noConflict(); 

jQuery(document).ready(function ($)) { 
    $('#input_7_1').datepicker({ 
     changeMonth: true, 
     onSelect: function (selectedDate) { 
      $('#input_7_5').datepicker('option', 'minDate', selectedDate); 
     } 
    }); 

    $('#input_7_5').datepicker({ 
     changeMonth: true, 
     onSelect: function (selectedDate) { 
      $('#input_7_1').datepicker('option', 'maxDate', selectedDate); 
     } 
    }); 
}); 

Mais le problème est qu'il n'y a pas d'effet dans mes datepickers, rien ne change, aucune idée pourquoi est-ce qui se passe?

Il ya une autre chose étrange, si les formes de gravité ont ce fichier: datepicker.js et si je supprime tout là, rien ne change, ou si changer une valeur, il n'y a pas non plus de changements. c'est le code dans ce fichier:

jQuery(document).ready(gformInitDatepicker); 
function gformInitDatepicker(){ 
    jQuery('.datepicker').each(
     function(){ 
      var element = jQuery(this); 
      var format = "mm/dd/yy"; 

      if(element.hasClass("mdy")) 
       format = "mm/dd/yy"; 
      else if(element.hasClass("dmy")) 
       format = "dd/mm/yy"; 
      else if(element.hasClass("dmy_dash")) 
       format = "dd-mm-yy"; 
      else if(element.hasClass("dmy_dot")) 
       format = "dd.mm.yy"; 
      else if(element.hasClass("ymd_slash")) 
       format = "yy/mm/dd"; 
      else if(element.hasClass("ymd_dash")) 
       format = "yy-mm-dd"; 
      else if(element.hasClass("ymd_dot")) 
       format = "yy.mm.dd"; 

      var image = ""; 
      var showOn = "focus"; 
      if(element.hasClass("datepicker_with_icon")){ 
       showOn = "both"; 
       image = jQuery('#gforms_calendar_icon_' + this.id).val(); 
      } 

      element.datepicker({ yearRange: '-100:+20', minDate: +10, maxDate: "+24M +30D", showOn: showOn, buttonImage: image, buttonImageOnly: true, dateFormat: format, changeMonth: false, changeYear: false, showAnim: 'slideDown', duration: 'slow' }).attr('readonly','readonly'); 
     } 
    ); 
} 
+0

pourrait être l'autre code datepicker est en cours d'exécution après le vôtre – charlietfl

+0

, comment puis-je faire en sorte à ce sujet ?, il y a un fichier dans la gravité formes plug-in où tout autre code est appliqué à tous datepickers – GTCR

+0

regard dans le source de la page et voir si c'est vrai en premier. Peut-être aussi besoin d'utiliser la méthode 'destroy' avant de déclarer de nouveaux paramètres. Ou simplement passer de nouvelles options et ne pas les initialiser si elles sont déjà initialisées – charlietfl

Répondre

0

je me suis dit à la fin, et je voudrais partager la solution:

Pour une raison que je n'étais pas en mesure d'utiliser le code de la manière je l'ai essayé, donc le code dans les fonctions ne fonctionne pas, mais j'ai essayé avec un autre code en insérant ceci sur mon page.php de mon thème, et cela a fonctionné, aussi j'ai dû changer chaque "$" en "jQuery", donc le code travaillé de cette façon, c'est le code que j'ai utilisé:

<script type="text/javascript"> 
jQuery(document).bind('gform_post_render', function(){ 
     // destroy default Gravity Form datepicker 
jQuery("#input_7_1").datepicker('destroy'); 
     // create new custom datepicker 
jQuery('#input_7_1').datepicker({ 
    minDate: 1, 
    defaultDate: 0, 
    dateFormat: "m/d/yy", 
    changeMonth: true, 
    changeYear: true, 
    onClose: function (dateText, inst) { 
     var d = jQuery.datepicker.parseDate(inst.settings.dateFormat, dateText); 
     d.setDate(d.getDate() + 1); 
     jQuery('#input_7_5').val(jQuery.datepicker.formatDate(inst.settings.dateFormat, d)); 
     jQuery('#input_7_5').datepicker('option', { 
      minDate: jQuery.datepicker.formatDate(inst.settings.dateFormat, d) 
     }); 
    } 
}); 
// destroy default Gravity Form datepicker 
jQuery('#input_7_5').datepicker('destroy'); 
jQuery('#input_7_5').datepicker({ 
    minDate: "d", 
    defaultDate: "d", 
    dateFormat: "m/d/yy", 
    changeMonth: true, 
    changeYear: false, 
}); 
}) 
</script> 

Espérons que cela aide quelqu'un d'autre qui essaie de changer quelque chose de la j requête datepicker de formes de gravité.

Meilleures salutations

0

Vous pouvez le faire en utilisant setDate, voir ce Fiddle.

$(function() { 
    $("#from").datepicker({ 
    onSelect: function() { 
     var newDate = $(this).datepicker('getDate'); 
     newDate.setDate(newDate.getDate()+7); 
     $('#to').datepicker('setDate', newDate); 
    } 
    }); 

    $("#to").datepicker(); 
}); 
+0

Salut, le problème est que pour une raison quelconque, tout changement ne prend aucun effet, je ne sais pas pourquoi, puis-je ajouter ce code à datepicker.js dans le dossier des formes de gravité?, Ou dois-je ajouter la fonction à mes fonctions de thème? – GTCR

+0

@ user55125 Ajoutez-le partout où le code datepicker est, je crois que vous mentionnez qu'il est 'my-js.js'. – enriqg9

+0

oui, je l'ai fait, mais il n'y a aucun changement du tout, même si je change le fichier datepicker.js principal du dossier plugin gravityforms, c'est bizarre, car j'ai changé il y a quelques mois, mais maintenant il n'y a plus d'effets sur rien J'ai déjà essayé purgin cache, cloudflare, en mode développement, mais rien. – GTCR

0

Votre code fonctionne et je l'utilise sur mon site, mais j'avais une question que je trouve un moyen de le réparer.

Le problème était que lorsque vous cliquez sur le champ de saisie la première fois, le programme datepicker s'affiche très bien. Mais si vous ne choisissez pas une date et cliquez ailleurs sur la page, lorsque vous cliquez de nouveau sur le champ de saisie, le programme datepicker n'apparaît plus. Le correctif pour cela était de changer l'événement onClose en surSelect. Je suis un noob alors je ne sais pas ce qui cause le problème mais je l'ai fait fonctionner maintenant.

<script type="text/javascript"> 
jQuery(document).bind('gform_post_render', function(){ 
jQuery(".event_date_value input").datepicker('destroy'); 
jQuery('.event_date_value input').datepicker({ 
    minDate: 1, 
    defaultDate: 0, 
    dateFormat: "m/d/yy", 
    changeMonth: true, 
    changeYear: true, 
    onSelect: function (dateText, inst) { 
     var d = jQuery.datepicker.parseDate(inst.settings.dateFormat, dateText); 
     d.setDate(d.getDate() - 30); 
     jQuery('.balance_date_value input').val(jQuery.datepicker.formatDate(inst.settings.dateFormat, d)); 
    jQuery('.balance_date_value input').datepicker('option', { 
     minDate: jQuery.datepicker.formatDate(inst.settings.dateFormat, d) 
    }); 
} 
}); 

jQuery('.balance_date_value input').datepicker('destroy'); 
jQuery('.balance_date_value input').datepicker({ 
    minDate: "d", 
    defaultDate: "d", 
    dateFormat: "m/d/yy", 
    changeMonth: true, 
    changeYear: false, 
}); 
}) 
</script>` 
+0

Pour une réponse plus complète, pourriez-vous poster la partie modifiée du code? –

+1

Je modifie mon message pour inclure le code. – vegas171

+0

En fait la fonction Onselect pour moi me donne une autre erreur, qui est que le Dateur de date ouvre automatiquement le deuxième datepicker (check-out), mais est un peu confus, je pense que le mieux que nous pouvons faire, est de rendre le champ bloqué, je veux dire le champ est en lecture seule, de cette manière le datepicker s'ouvrira toujours, sans erreur, j'essaierai de le faire et quand c'est fait, ill postera le résultat et le code à faire. :) – GTCR

0

Je sais que c'est un peu ancien poste, mais pour ceux qui trébuche sur la même question, la question ne nécessite pas une telle solution complexe - tout ce qui manquait était le « rafraichissement

jQuery.noConflict(); 

jQuery(document).ready(function ($)) { 
    $('#input_7_1').datepicker({ 
     changeMonth: true, 
     onSelect: function (selectedDate) { 
      $('#input_7_5').datepicker('option', 'minDate', selectedDate); 
      $('#input_7_5').datepicker('refresh'); 
     } 
    }); 

    $('#input_7_5').datepicker({ 
     changeMonth: true, 
     onSelect: function (selectedDate) { 
      $('#input_7_1').datepicker('option', 'maxDate', selectedDate); 
      $('#input_7_1').datepicker('refresh'); 
     } 
    }); 
}); 
Questions connexes