Est-il possible de désactiver tous les champs de saisie dans un conteneur div avec dojo?Dojo désactive tous les champs d'entrée dans le conteneur div
Quelque chose comme:
dijit.byId('main').disable -> Input
Est-il possible de désactiver tous les champs de saisie dans un conteneur div avec dojo?Dojo désactive tous les champs d'entrée dans le conteneur div
Quelque chose comme:
dijit.byId('main').disable -> Input
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:
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(...
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');
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)
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.
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.