jQuery $.chaque Portée des variables
Avoir un problème de portée de problème avec un $.each
boucle dans jQuery. Comment puis-je obtenir une variable globale dans une fonction pour définir dans une boucle ou au moins passer quelque chose hors de lui?
var some_function = function() {
//false by default
var something = false;
$.each(array, function(key, val) {
if (val == 'something')
{
//even if one item evaluates true I need to check outside of the loop
something = true;
}
});
if (something == true)
{
//do something else, but always false
}
}
Depuis que je suis besoin d'évaluer tous les éléments du tableau, et si un seul est true
, puis faire quelque chose de supplémentaire, en dehors de la $.each
.
Mise à jour
$(document).ready(function () {
something();
$(':radio').trigger('change');
)};
Ok, donc c'est le code réel. C'est l'alerte 'false' dans le bas et alertes 'bonjour' deux fois, comme s'il allait dans l'ordre inverse.
var something = function() {
var q_radios = {
'radio1' : 'radio1_selector',
'radio2' : 'radio2_selector',
};
var show_me = false;
$.each(q_radios, function(name, q_selector) {
$('input:radio[name=' + q_selector + ']').change(function() {
show_me = true;
alert('hello');
});
});
if (show_me == true)
{
alert('yes');
}
else
{
alert('false');
}
};
Avez-vous l'essayer? Il devrait fonctionner très bien comme il est.
Bien sûr, échoue à chaque fois. Si je me sens un peu retardé aujourd'hui.
Puis
Avez-vous de l'appel de
Merci de poster ce que vous faites réellement.
Bien sûr, échoue à chaque fois. Si je me sens un peu retardé aujourd'hui.
Puis
val
jamais égale 'something'
. Pouvez-vous poster ce array
est?Avez-vous de l'appel de
some_function()
??? jsfiddle.net/PC4VqMerci de poster ce que vous faites réellement.
OriginalL'auteur wesside | 2012-06-01
Vous devez vous connecter pour publier un commentaire.
Plus ou moins exactement ce que vous avez ... vous avez juste besoin de transmettre les données à la fonction (en la faisant accepter un argument). Voir un exemple vivant.
OriginalL'auteur Quentin
Je recommande natif Matrice d'itération méthodes:
Ici,
something
seratrue
si au moins un élément de tableau a la valeur'something'
..some()
est une bonne approche, tant qu'il n'y a pas d'autres effets secondaires qui doivent être appliquées au-delà du premier match. Sinon,.reduce()
pourrait être utilisé, ou.map
avec.length
.Sympa, mais si c'est un objet ?
Un tableau comme objet? Pourriez-vous nous donner un exemple?
Tout comme dans la question: {'radio1': obj1, 'idem radio2': obj2, ... }. une autre petite question: pour les tableaux et au tableau comme des objets, comment itérer copies et pas de référence directe à des objets réels ?
Il y a une nouvelle
.values()
méthode qui vous donne un tableau de valeurs de propriété, par exempleobj.values() // returns [obj1, obj2, ...]
, mais vous auriez besoin de vérifier Babel préréglages de la mettre en œuvre. Vous pouvez également allerObject.keys(obj).some(key => { let val = obj[key]; /* check val like above */ })
. Quant à la seconde question, vous devez créer les copies de la première. Si les objets sont les nœuds DOM, vous auriez besoin de les cloner, le clonage, les nœuds DOM manuellement n'est pas très commun, je pense.OriginalL'auteur Šime Vidas