2009-09-03 8 views

Répondre

7

Bien sûr, il est. Ouvrir ce form test page par exemple, le lancement Firebug et Execute dans la console:

var container = dojo.query('div')[13]; 
console.log(container); 
dojo.query('input', container).forEach(
    function(inputElem){ 
    console.log(inputElem); 
    inputElem.disabled = 'disabled'; 
    } 
) 

Notes:

  • Sur que les éléments de formulaire de page de test sont en fait des widgets de forme Dijit, mais dans cet exemple je traite les comme si elles étaient des étiquettes d'entrée normales
  • La deuxième requête dojo sélectionne tous les éléments d'entrée dans l'élément container. Si le conteneur a un identifiant unique, vous pouvez simplifier l'exemple en n'ayant qu'un seul dojo.query: dojo.query('#containerId input').forEach(...
  • forEach boucle tous les éléments d'entrée trouvés et leur applique la fonction donnée.

Mise à jour: Il y a aussi un raccourci pour définir une valeur d'attribut en utilisant la fonction NodeList « s attr au lieu de forEach. attr prend d'abord le nom d'attribut et la valeur ou un objet avec des paires nom/valeur:

var container = dojo.query('div')[13]; 
dojo.query('input', container).attr('disabled', 'disabled'); 
6

Autre chose à garder à l'esprit est la différence entre un Dijit et un DomNode régulier. Si vous voulez que tous Dijit est dans un DomNode, vous pouvez les convertir à partir de nœuds -> refs Dijit avec requête sans problème:

// find all widget-dom-nodes in a div, convert them to dijit reference: 
var widgets = dojo.query("[widgetId]", someDiv).map(dijit.byNode); 
// now iterate over that array making each disabled in dijit-land: 
dojo.forEach(widgets, function(w){ w.attr("disabled", "disabled"); } 

Cela dépend vraiment juste sur si vos entrées sont des balises d'entrée régulières Dom ou ont été convertis en la riches modèles Dijit (qui tous ont un apport régulier en eux, juste contrôlés par la référence widget à la place)

10

Voilà comment je le fais:

dojo.query("input, button, textarea, select", container).attr("disabled", true); 

Cette ligne unique désactive tous les éléments de forme dans la donnée récipient.

1

je le ferais comme ceci:

var widgets; 

require(["dijit/registry", "dojo/dom"], function(registry, dom){ 
    widgets = registry.findWidgets(dom.byId(domId)); 
}); 

require(["dojo/_base/array"], function(array){ 
    array.forEach(widgets, function(widget, index) { 
     widget.set("disabled", true); 
    }); 
}); 

méthode findWidgets est essentielle pour obtenir tous les widgets sous un DOM spécifique.

Questions connexes