2010-07-21 5 views
1

Je construis un tableau, que je vais utiliser plus tard pour comparer certaines valeurs. -je utiliser ce code pour construire « myArray », que je vais utiliser plus tard:Interprétation jQuery Array

var optionTexts = []; 
$('#stripeMeSubSubCat tr').each(function(){ 

if ($(this).find('input:checkbox.subsubcat_chkclass:not(:checked)').length == 0) 
{ 
    subsubrow_cat_id_no = parseInt($(this).closest("tr").attr("id")); 

    optionTexts.push(subsubrow_cat_id_no); 
    }; 

}); 

var myArray = optionTexts.join(', '); 
alert("myArray = "+myArray); 

J'utilise ici monTableau pour faire une comparaison:

$('#stripeMeSubSubCat tr').each(function(){ 

    myindex = $.trim($(this).closest("tr").attr("id")); 
    var arr = [myArray]; 

    //var arr = [0, 439, 52, 53]; 

    myindex = parseInt(myindex); 

    alert(myindex); 
    alert(arr); 

    if ((jQuery.inArray(myindex, arr)) == -1) { 
     var equal = "FALSE"; 
    } else { 
     var equal = "TRUE"; 
    $("#stripeMeSubSubCat tr[id='" + myindex + "'] input").attr('checked', true); 
    }; 

    alert(equal); 
}); 

Comme le code ci-dessus, il revient toujours FAUX. Toutefois, si vous n'utilisez pas le premier bloc de code et que vous activez simplement le paramètre var arr (où j'ai défini le tableau sur des données fixes), il renvoie TRUE à l'endroit voulu.

Des idées?

Répondre

1

monTableau est une variable de chaîne créée en concaténant les éléments de la matrice optionsText, et non un ensemble d'éléments. Vous devriez vérifier optionsText au lieu de myArray.

if ((jQuery.inArray(myindex, optionsText)) == -1) { 

En aparté, pourquoi définir la equal variable à la chaîne « FAUX » ou « TRUE » - pourquoi ne pas mettre simplement à false ou true (valeurs booléennes)?

+0

de cette façon, il fonctionne aussi si je garde myindex = parseInt (myindex); Le plus étrange arrive maintenant cependant. Lorsque je supprime les alertes du code, cela ne change pas l'attribut de la case à cocher. Comment c'est? – andreas777

+0

@ andreas7 - Je n'ai aucune idée de la façon dont le code que vous avez ci-dessus fonctionne parce que 'myArray' n'en est pas un et donc' arr' est un tableau contenant uniquement l'élément unique - la valeur de 'myarray'. Même si 'myarray' était un tableau,' arr' serait un tableau contenant un seul élément, lui-même un tableau. Je peux voir où vous devez convertir 'myIndex' en une valeur numérique sinon vous comparez les chaînes aux nombres, mais je pense que vous obtenez des résultats erronés et vous devriez vraiment vérifier' optionsText' pour la valeur. – tvanfosson

+0

J'ai fait le changement que vous avez proposé et n'utilisez donc pas myArray n'importe où. Cela fonctionne bien tant que les alertes sont dans le code. Si je les supprime, cela ne fonctionne pas. Y a-t-il un problème de synchronisation, comment puis-je le gérer? – andreas777

0

myArray est une chaîne, le résultat de

var myArray = optionTexts.join(', '); 

Plus tard, vous essayez de le changer de nouveau dans un tableau avec:

var arr = [myArray]; 

qui va réellement créer un tableau avec la chaîne myArray comme le premier et seul élément. Utilisez split(", ") place:

var arr = myArray.split(", "); 
+1

J'ai ajouté ce que vous avez suggéré et enlevé aussi myindex = parseInt (myindex); et ça a marché! Merci pour votre réponse rapide et réponse. – andreas777

+0

Le plus étrange arrive maintenant cependant. Lorsque je supprime les alertes du code, cela ne change pas l'attribut de la case à cocher. Comment c'est? – andreas777

+1

@ andreas7: Je ne vois pas vraiment où vous définissez la propriété 'myindex'. Aussi, bien que cela ne soit pas la cause du problème, les attributs 'id' [doivent commencer par une lettre] (http://www.w3.org/TR/html401/types.html#type-name) - ils ne peuvent pas être numérique seulement. –