11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je suis actuellement bloqué sur une DataTable.

Alors je m'explique je suis actuellement en train de coder une DataTable qui contiens des DatePickers pour pouvoir effectuer des changement de date dans le tableau directement.
J'ai réussi à faire cela sans problème avec les données qui étaient directement inscrite dans le PHP.

Seulement pour une meilleur efficacité et précision je doit changer la façon de récupérer mes données pour cela j'ai mis en place la DataTable en server-side processing toujours avec mes DatePickers jusqu’à maintenant je suis arriver à la faire.
Là ou j'ai mon problème c'est que le JQuery que j'ai mis pour mon DatePicker ne s'exécute pas du tout et je n'ai aucune erreur.

Voici mon JQuery :

$(document).ready(function (){
	var table = $('#example').DataTable({
		"processing": true,
        "serverSide": true,
        "ajax": "<?php echo DIR . Url::URI_AJAX_VRS ?>",
		autoWidth: false,
		responsive: true,
		"stateSave": true,
		"selector-modifier": {
			// DataTables core
			order:  'applied',  // 'current', 'applied', 'index',  'original'
			page:   'all',      // 'all',     'current'
			search: 'applied',     // 'none',    'applied', 'removed'
		
			// Extension - KeyTable (v2.1+) - cells only
			focused: undefined, // true, false, undefined
		
			// Extension - Select (v1.0+)
			selected: undefined // true, false, undefined
		},
	});

	$('.dt-fin').datepicker({
                // Mon code qui ne s’exécute pas
		format: "dd/mm/yyyy",
		weekStart: 1,
		maxViewMode: 3,
		language: "fr",
		daysOfWeekHighlighted: "1,2,3,4,5",
		calendarWeeks: true,
		todayHighlight: true,
		autoclose: true

	}).on("changeDate", function() {
		// là non plus
	});
});


Voilà mon Code PHP :

public function filterTablesVrs()
	{
		// DB table to use
		$table = Database::V_VRS;
		
		// Table's primary key
		$primaryKey = mVVrs::M_CD_LOGI;
		
		$columns = array(
			array( 'db' => mVVrs::M_CD_LOGI,   'dt' => 0 ),
			array( 'db' => mVVrs::M_LIB_LNG,   'dt' => 1 ),
			array( 'db' => mVVrs::M_ID_VRS,    'dt' => 2 ),
			array( 'db' => mVVrs::M_DTL_COMPL, 'dt' => 3 ),
			array(
				'db' => mVVrs::M_DT_DEB,
				'dt' => 4,
				'formatter' => function ($d, $row)
				{
					if($d != null){
						return self::convertDateFr($d);
					}else{
						return '';
					}
				}
			),
			array( 
				'db' => mVVrs::M_DT_FIN,
				'dt' => 5,
				'formatter' => function ($d, $row)
				{
					if($d != null){
						return '<div class="input-group date dt-fin" data-provide="datepicker" id="DtFin-' . $row->{mVVrs::M_CD_LOGI} . '-' . $row->{mVVrs::M_ID_VRS} . '">
									<div class="input-group-addon">
										<i class="fa fa-calendar"></i>
									</div>
									<input type="text" class="form-control" value="' . self::convertDateFr($d) . '" style="width: 95px;">
								</div>';
					}else{
						return '<div class="input-group date dt-fin" data-provide="datepicker" id="DtFin' . $row->{mVVrs::M_CD_LOGI} . '-' . $row->{mVVrs::M_ID_VRS} . '">
									<div class="input-group-addon">
										<i class="fa fa-calendar"></i>
									</div>
									<input 
										type="text" 
										class="form-control datepicker"
										value="" 
										style="width: 95px;"
										data-date-language="fr">
								</div>';
					}
				}
			)
		);

		echo json_encode(
			SSP::simple( $_GET, $table, $primaryKey, $columns )
		);
	}


Merci pour l'aide en espérant avoir été explicite
Bonjour,

Je ne connais pas le plugin que tu utilises mais généralement ce type de système s'exécute sur un input, hors là tu le fais sur le div parent.
Hello Smiley smile

alors moi je connais bien datatable Smiley smile

DOnc déjà en effet tu es sur le div et non sur l'input ce qui va poser problème Smiley smile

Ensuite comme tout pluggin il est préférable de le lancer une fois les éléments construits dans le dom Smiley smile

Là tu le lance en même temps que datatable et donc forcément même si tu l'appliquais au bon endroit ben il ne trouverai pas l'élément Smiley cligne

Il faut lancer ton script APRES le rendu de datatable Smiley smile

il y a plusieurs listener dispo avec datatable, à voir lequel marchera le mieux Smiley cligne

il faudrait que tu fasses quelque chose dans ce genre :

$("#table").on('init.dt', function(settings, json){ // là tu lance ton datepicker });

Modifié par pchlj (17 May 2017 - 17:12)
Meilleure solution
Modérateur
Il est possible de le lancer aussi à l'initialisation de la datatable avec «initComplete»:

var table = $('#example').DataTable({
  initComplete: function(){
    // lancer le datepicker
  }
});
Merci pour tout ces retours je vais tester ça tout de suite.
Mais je confirme je ne suis pas un expert de ce genre de plugins j'apprend sur le tas
Je n'ai utilisé que la méthode de Pchlj (je voulais bien segmenter mon code) donc je ne dit pas que ce que tu as dit Kustolovic est faux Smiley smile .
Mais bon ça marche exactement comme je veux après correction de toutes mes erreurs.
Merci pour ce retour rapide et pour la solution Smiley biggrin
Je n'ai utilisé que la méthode de Pchlj (je voulais bien segmenter mon code) donc je ne dit pas que ce que tu as dit Kustolovic est faux Smiley smile .
Mais bon ça marche exactement comme je veux après correction de toutes mes erreurs.
Merci pour ce retour rapide et pour la solution Smiley biggrin
Modifié par Dimit (18 May 2017 - 09:56)