J'utilise le plugin jsTree jQuery avec le thème de case à cocher. Est-ce que quelqu'un sait comment obtenir les valeurs sélectionnées avec un formulaire?
Je vous remercie!
Avez-vous eu votre réponse? Sinon, en voici un qui apparaît dans les groupes jstree google
function submitMe () { var checked_ids = []; $ ("# server_tree"). jstree ("get_checked", null, true) .each (function () { check_ids.Push (this.id); }); doStuff (check_ids);
Dans la dernière version (3.0), l'API a été modifiée.
Si vous avez juste besoin d'un tableau d'ID sélectionnés (comme dans les exemples de ce nœud), c'est maintenant très simple:
var selectedElmsIds = $('#tree').jstree("get_selected");
Si vous devez parcourir les éléments sélectionnés, il vous suffit de passer un paramètre "true" supplémentaire.
var selectedElmsIds = [];
var selectedElms = $('#tree').jstree("get_selected", true);
$.each(selectedElms, function() {
selectedElmsIds.Push(this.id);
});
Tous ceux qui ont travaillé avec Jstree peuvent être confrontés à cette question: Comment obtenir les ID vérifiés de Jstree sous forme? voici la solution:
function submitMe() {
var checked_ids = [];
$('#your-tree-id').jstree("get_checked",null,true).each(function(){
checked_ids.Push(this.id);
});
//setting to hidden field
document.getElementById('jsfields').value = checked_ids.join(",");
}
Maintenant, nous le plaçons dans un champ caché:
<input type="hidden" name="jsfields" id="jsfields" value="" />
La solution suggérée par les groupes Google n'a toutefois pas fonctionné pour les nœuds partiellement vérifiés, dans mon cas. Je devais laisser get_checked et procéder comme suit pour obtenir des nœuds entièrement sélectionnés et partiellement sélectionnés.
$(".sector-tree").find(".jstree-undetermined").each(function(i,element){
checked_ids.Push($(element).attr("id"));
if ($(this).find(".jstree-undetermined").length == 0) {
$(this).find(".jstree-checked").each(function(i, element){
checked_ids.Push({$(element).attr("id"));
});
}
});
// collect the rest of the checked nodes that exist under checked parents
$(".sector-tree").find(".jstree-checked").each(function(i, element){ //also includes the ones below 'undetermined' parent
var selectedElement = $(element).attr("id");
if ( hasItem(selectedElement, checked_ids ) < 0 ) {
checked_ids.Push(selectedElement);
}
});
Avec jQuery
vous pouvez simplement faire:
$('.jstree-checked,.jstree-undetermined').each(function(){
var rawCheckedID = $(this).find('a').attr('id');
});
Cela permettra d'obtenir l'indéterminé et vérifié en même temps. La solution de soumya ci-dessus peut être plus efficace.
Vous pouvez utiliser ceci:
var result = $('#your_tree').jstree('get_selected');
var selectedElmsIds = [];
$("#jstree2").find("li").each(function(i, element) { //also includes the ones below 'undetermined' parent
if ($(this).attr("aria-selected") == "true") {
selectedElmsIds.Push($(this).attr('id'));
}
});
console.log(selectedElmsIds);
$(document).ready(function(){
var jsfields = $('#myTree').jstree('get_selected');
$('.jsfields').val(JSON.stringify([jsfields]));
})
<input type="hidden" class="jsfields" value=""/>
Changez la valeur de $('#myTree')
en votre arbre respectif, cela fonctionne mieux pour moi dans un appel ajax. une légère modification peut être nécessaire pour renseigner le champ de saisie de forme simple.
Ce que j'ai fait:
function getSelectedItems()
{
var checked_ids = [];
checkedNodes = $("#MyTree").jstree("get_checked", null, true);
for(var i = 0; i < checkedNodes.length; i++)
{
var id = $(checkedNodes[i].outerHTML)[0].id;
checked_ids.Push(id);
}
// Do whatever you want with the checked_ids
}
Cela vous donnera un tableau de tous les noeuds sélectionnés et de leurs sous-noeuds et feuilles; ainsi que des feuilles simples sélectionnées sous d'autres nœuds.
//click button show nodes checked
$(document).on('click','#showme',function() {
var checked_ids = [];
var checked_ids_meta = [];
$('#demo_0').jstree("get_checked",null,true).each(function(i, e){
checked_ids.Push($(this).data("param")); // json metadata
checked_ids_meta.Push($(this).attr("href")); // json attr
});
console.log(checked_ids)
console.log(checked_ids_meta)
});