Je suis un peu bloqué sur la façon d'obtenir les clés et les valeurs du JSON donné et de l'assigner à une autre fonction javascript. L'idée est que l'utilisateur sélectionne une valeur dans la liste de sélection et que le code fasse une boucle dans Json, trouve des clés et des valeurs particulières (selon l'utilisateur choisi) et pousse ces clés et valeurs dans un autre constructeur javascript pour dessiner un graphique. Voici donc ce que je jusqu'ici ai pu faire: html liste select avec la fonction incendie jusqu'à événement onclick:Obtenir des paires de clés et de valeurs du Json, en utilisant JavaScript
<select id="abc">
<option value="v1" onclick="my_function()">V1</option>
</select>
Et est une fonction ici qui devrait faire le reste. Cependant, quand je boucle le JSON, SEULEMENT la dernière paire assignée au constructeur de js et donc SEULEMENT une (dernière) paire est visible sur l'écran. Comment assigner TOUTES les clés et valeurs dans le constructeur? Voici mon code à ce jour:
function my_function(){
var my_element = document.getElementById("abc").value; // get the select list value
var arr=[''];
var j=0;
for (var i = 0; i < json_name.data.length; i++) { // start the loop
if($.inArray(json_name.data[i][my_element],arr)<0){
arr[j]=json_name.data[i][my_element];
gantt.groupBy({ // here is constructor starts
relation_property: my_element,
groups: [{
key: arr[j], label: arr[j] }],
group_id: "key",
group_text: "label"
});
j++;
}}
}
Et voici un échantillon de JSON:
var json_name = {
"data":[
{"id":11, "text":"Project #1", "start_date":"", "duration":"", "progress": 0.6, "open": true},
{"id":12, "text":"Task #1", "start_date":"03-04-2013", "duration":"5", "parent":"11", "progress": 1, "open": true},
{"id":13, "text":"Task #2", "start_date":"", "duration":"", "parent":"11", "progress": 0.5, "open": true},
{"id":14, "text":"Task #3", "start_date":"02-04-2013", "duration":"6", "parent":"11", "progress": 0.8, "open": true},
{"id":15, "text":"Task #4", "start_date":"", "duration":"", "parent":"11", "progress": 0.2, "open": true},
{"id":16, "text":"Task #5", "start_date":"02-04-2013", "duration":"7", "parent":"11", "progress": 0, "open": true},
{"id":17, "text":"Task #2.1", "start_date":"03-04-2013", "duration":"2", "parent":"13", "progress": 1, "open": true}];}
Quelqu'un peut-il me montrer comment obtenir toutes les clés et les valeurs et les affecter dans le constructeur? par exemple. Laisse dire que l'utilisateur sélectionne la durée dans la liste de sélection, donc le code devrait passer en boucle dans tout le json, récupérer toutes les clés et valeurs de durée et les pousser toutes dans le constructeur? Donc, dans ma compréhension, le constructeur devrait ressembler à ceci:
gantt.groupBy({
relation_property: my_element,
groups: [{
key:1, label:1},{ // where key and a label equals to first matched key and value in json
key:2, label: 2},{
...... // second matched etc etc
key:7, label: 7} ], // last matched key and value ..
group_id: "key",
group_text: "label"
});
Toute aide très appréciée. Merci
Alex Klimenkov Merci pour le commentaire Alex. Le v1 est juste un exemple factice, sur l'élément de sélection réel devrait être l'une des propriétés existantes présentées sur le json (par exemple, «progrès», «durée», etc.). Le 'onchange' ne fonctionne pas pour certaines raisons, c'est pourquoi je l'ai changé en 'onclick' qui fonctionne bien. Mais ce sont des problèmes mineurs et peuvent facilement être corrigés. La question la plus importante est comment attacher chaque paire (clé et étiquette) au gantt.groupBy? Pouvez-vous donner un exemple s'il vous plaît? Pas un grand fan de js .. lol Merci – USSR
salut, s'il vous plaît vérifier la réponse mise à jour –
Merci Alex, fonctionne comme un charme. Exactement ce que je cherchais. Merci beaucoup ! – USSR