par
alexisp » 28 nov. 2020, 01:02
Bonjour,
Nouveau sur le forum je ne suis pas parvenu à trouver solution en fouillant sur le net. J'espère donc pouvoir trouver un peu d'aide parmi vous sur un problème d'affichage d'une balise <select multiple> après l'avoir mise à jour par AJAX.
Sur une base de données, j'enregistre des fiches contenant différentes informations donc différents champs. Parmi ces champs se trouve la ou les "catégorie(s) de la fiche", sélectionnée(s) par le biais d'une balise <select multiple >.
Pour créer la fiche tout va bien et voilà à quoi ressemble le <select multiple> une fois les catégories sélectionnées :
https://drive.google.com/file/d/1gDRgdq ... sp=sharing
Mon problème survient lors de l'édition d'une fiche pour modification via l'affichage d'un <DIV> préalablement chargé et caché sur la page HTML principale où sont listées toutes les fiches.
Toutes les données sont bien récupérées et tout fonctionne correctement mais l'affichage du <select multiple ="multiple"> devient cela :
https://drive.google.com/file/d/1fSh7gG ... sp=sharing
Pour finir, mon problème est que je ne parviens pas à afficher le <select multiple> avec les vignettes de chaque catégories comme sur la première image : https://drive.google.com/file/d/1gDRgdq ... sp=sharing
Avez vous une solution à proposer svp ?
DIV où est injecté le code du <select multiple> (il est contenu dans le DIV initialement caché utilisé comme fenêtre d'édition)
Script php appelé par ajax
Code : Tout sélectionner
<?php
$response = array('status' => 0);
$sql = "SELECT * from categories";
$rs = $conn->execute($sql);
if ( $conn->Affected_Rows()) {
$toutes_categories = $rs->getrows();
$response['toutes_categories'] = $toutes_categories;
}
$sql = "SELECT * from f_categories WHERE FID = " .$conn->qStr($fid);
$rs = $conn->execute($sql);
if ( $conn->Affected_Rows()) {
$fiches = $rs->getrows();
$fiche_categories = array();
$i=0;
foreach ($fiches as $key => $value){
$fiche_categories[$i]=$value;
$i++;
}
$response['fiche_categories'] = $fiche_categories;
}
echo json_encode($response);
die();
?>
Script ajax appelé par un bouton
Code : Tout sélectionner
$(document).ready(function(){
$("body").on('click', "a[id*='edit_fiche_']", function(event) {
event.preventDefault();
var id = $(this).attr('id');
var split = id.split('_');
var fiche_id = split[2];
$.post(base_url + '/ajax/admin_get_fiche', { fiche_id: fiche_id },
function (response) {
if (response.status) {
//Réinitialiser les erreurs
$('.form-control').each(function(){
$(this).removeClass('error');
});
//Charger les données fiche
var fichecategories = new Array();
var toutescategories = new Array();
fichecategories = response.fiche_categories;
toutescategories = response.toutes_categories;
out = '<select id="edit-category" name="edit-category[]" multiple style="width:100%";>';
for (var i in toutescategories) {
objall = Object.values(toutescategories[i]);
var match = 0;
for (var j in fichecategories) {
var objvid = Object.values(fichecategories[j]);
if (objall[0] == objvid[1]){
match = 1;
}
}
if (match != 0){
out += '<option value="'+ objall[0] + '" selected="selected">'+ objall[1] +'</option>';
} else {
out += '<option value="'+ objall[0] + '">'+ objall[1] +'</option>';
}
}
out += '</select>';
$('#div-categ').html(out);
//Ajuste la marge de gauche à une valeur entière - Centre
var modal_ml = parseInt(($(window).width()-$('#editModalDialog').width())/2);
$('#editModal').modal('show');
if ($(window).width()>768) {
$('#editModalDialog').css('margin-left',Math.floor(modal_ml)+'px');
}
} else {
Messenger().post({
message: 'Fiche <b>ID ' + fiche_id + '</b>: Echec d\'obtention des détails de la fiche !',
type: 'error'
});
}
}, "json");
});
});
Bonjour,
Nouveau sur le forum je ne suis pas parvenu à trouver solution en fouillant sur le net. J'espère donc pouvoir trouver un peu d'aide parmi vous sur un problème d'affichage d'une balise <select multiple> après l'avoir mise à jour par AJAX.
Sur une base de données, j'enregistre des fiches contenant différentes informations donc différents champs. Parmi ces champs se trouve la ou les "catégorie(s) de la fiche", sélectionnée(s) par le biais d'une balise <select multiple >.
Pour créer la fiche tout va bien et voilà à quoi ressemble le <select multiple> une fois les catégories sélectionnées : [url]https://drive.google.com/file/d/1gDRgdqlFvFbW9a7V6k0K7LnOvv4Gj032/view?usp=sharing[/url]
Mon problème survient lors de l'édition d'une fiche pour modification via l'affichage d'un <DIV> préalablement chargé et caché sur la page HTML principale où sont listées toutes les fiches.
Toutes les données sont bien récupérées et tout fonctionne correctement mais l'affichage du <select multiple ="multiple"> devient cela : [url]https://drive.google.com/file/d/1fSh7gGj8qLbcSTqNyX2o88X0qZaFpINB/view?usp=sharing[/url]
[b]Pour finir, mon problème est que je ne parviens pas à afficher le <select multiple> avec les vignettes de chaque catégories comme sur la première image : [url]https://drive.google.com/file/d/1gDRgdqlFvFbW9a7V6k0K7LnOvv4Gj032/view?usp=sharing[/url]
Avez vous une solution à proposer svp ?[/b]
DIV où est injecté le code du <select multiple> (il est contenu dans le DIV initialement caché utilisé comme fenêtre d'édition)
[quote][code]<div id="div-categ"></div>[/code][/quote]
Script php appelé par ajax
[quote][code]<?php
$response = array('status' => 0);
$sql = "SELECT * from categories";
$rs = $conn->execute($sql);
if ( $conn->Affected_Rows()) {
$toutes_categories = $rs->getrows();
$response['toutes_categories'] = $toutes_categories;
}
$sql = "SELECT * from f_categories WHERE FID = " .$conn->qStr($fid);
$rs = $conn->execute($sql);
if ( $conn->Affected_Rows()) {
$fiches = $rs->getrows();
$fiche_categories = array();
$i=0;
foreach ($fiches as $key => $value){
$fiche_categories[$i]=$value;
$i++;
}
$response['fiche_categories'] = $fiche_categories;
}
echo json_encode($response);
die();
?>[/code][/quote]
Script ajax appelé par un bouton
[quote][code]$(document).ready(function(){
$("body").on('click', "a[id*='edit_fiche_']", function(event) {
event.preventDefault();
var id = $(this).attr('id');
var split = id.split('_');
var fiche_id = split[2];
$.post(base_url + '/ajax/admin_get_fiche', { fiche_id: fiche_id },
function (response) {
if (response.status) {
//Réinitialiser les erreurs
$('.form-control').each(function(){
$(this).removeClass('error');
});
//Charger les données fiche
var fichecategories = new Array();
var toutescategories = new Array();
fichecategories = response.fiche_categories;
toutescategories = response.toutes_categories;
out = '<select id="edit-category" name="edit-category[]" multiple style="width:100%";>';
for (var i in toutescategories) {
objall = Object.values(toutescategories[i]);
var match = 0;
for (var j in fichecategories) {
var objvid = Object.values(fichecategories[j]);
if (objall[0] == objvid[1]){
match = 1;
}
}
if (match != 0){
out += '<option value="'+ objall[0] + '" selected="selected">'+ objall[1] +'</option>';
} else {
out += '<option value="'+ objall[0] + '">'+ objall[1] +'</option>';
}
}
out += '</select>';
$('#div-categ').html(out);
//Ajuste la marge de gauche à une valeur entière - Centre
var modal_ml = parseInt(($(window).width()-$('#editModalDialog').width())/2);
$('#editModal').modal('show');
if ($(window).width()>768) {
$('#editModalDialog').css('margin-left',Math.floor(modal_ml)+'px');
}
} else {
Messenger().post({
message: 'Fiche <b>ID ' + fiche_id + '</b>: Echec d\'obtention des détails de la fiche !',
type: 'error'
});
}
}, "json");
});
});[/code][/quote]