2014-07-05 3 views
0

J'ai une page qui crée des lignes, qui incluent des cases à cocher qui ont des identifiants non-séquentiels. Selon les données de la base de données, elles doivent parfois être vérifiées sur onLoad. Le PHP parcourt les données en créant la page.dans la page jquery non tir

Le problème: la jquery que j'ai dans la boucle ne fonctionne pas. Il ne vérifie pas la case à cocher ou ne déclenche pas l'événement de modification. Il ne me montre pas non plus les consoles.logs que j'ai ici. Si je coche la case à cocher inline, cela fonctionne, mais il ne déclenche pas l'événement change et DOIT faire fonctionner la page correctement.

est ici un code:

<? foreach($weekly as $w){ ?> 

// create the row 

    <input type="checkbox" id="slW_4" name="slW_4" <? if($w['current_sl_id']){echo 'checked';} ?>> 

    <? if($w['current_sl_id']){ ?> 
    <script language="text/javascript"> 
     $(document).ready(function(){ 
     $('#slW_4').prop('checked', true); 
     console.log('should have checked the checkbox: '+ $('#slW_4').is(':checked')); 
     $('#slW_4').trigger("change"); 
     console.log('should have triggered change'); 
     }); 
    </script> 
    <? } ?> 

<? } ?> 
+0

Votre gestionnaire doc.ready est à l'intérieur de la boucle = pas correct – adaam

+0

Je recommande vivement de factoriser votre javascript en dehors de cette boucle. Dans le pire des cas, vous devrez relouer '$ weekly' plus tard dans le code. –

+2

Vous obtenez également le même ID sur chaque boucle. '$ ('# slW_4')' obtiendra seulement le premier élément avec cet ID. –

Répondre

0

Je recommande fortement de factoriser votre javascript en dehors de cette boucle. Le pire des cas est que vous devez relouer $ chaque semaine plus tard dans le code.

0

Vous n'avez rien lié à écouter l'événement de changement et par défaut le déclenchement d'une change ne fait rien à la case à cocher réelle.

Vous auriez besoin d'un auditeur comme:

$('#slW_4').on('change', function (event) { 
    // ...do something here 
}); 

// Rest of your code underneath 

Ensuite, la $('#slW_4').trigger("change"); déclencherait cette fonction

également sans rapport, mais en haut, si vous appelez $('#slW_4') beaucoup, je serais stocker dans une variable comme var $sl4 = $('#slW_4') et utiliser cette variable comme $sl4.prop('checked', true)

+0

Je pense que vous avez manqué un problème évident lorsque vous dites * que vous appelez [le même résultat id'd] beaucoup * mais que vous ne reconnaissez pas * le même ID encore et encore *. –