Probleme mit each

hups1803

Erfahrenes Mitglied
Hallo ich habe auf meiner seite mehrere divs und möchte das jquery verschiedene html values dort einträgt

habe es so versucht
script:
Code:
json = {
  'selected': '1. select',
  'selected-2': '2. select'
};

jQuery.each(json, function(i, val) {
  //alert(i + ' : ' + val);
   
  $('.tl').html('<div>'+i + ' : ' + val+'<div>')
   
});

html:
Code:
<div class='tl'></div>
<div class='tl'></div>

ergebnis:

selected-2 : 2. select
selected-2 : 2. select

es sollte aber so aussehen:
selected : 1. select
selected-2 : 2. select

wie bekomme ich das hin ??

ich möchte im zweiten schritt in der each funktion eine ajax abfrage einbauen wo er in der php eine datenbank count abfrage macht
 
Du überschreibst immer alle DIVs. Versuche es mal so:

Javascript:
var myDivs = $('.tl');
json = {
  'selected': '1. select',
  'selected-2': '2. select'
};
var idx = 0;
jQuery.each(json, function(i, val) {
  // Nimm das idx-te DIV
  myDivs.eq(idx).html('<div>'+i + ' : ' + val+'<div>');
  idx++;
});
Du musst also eine Zählvariable einführen. Bei Arrays wäre das einfacher, da jQuery.each() bei Arrays den Index der Callbackfunktion automatisch übergibt: http://api.jquery.com/jQuery.each/
 
Danke für deine Hilfe,

leide wohl grad an selbstüberschätzung!! ich wollte den code auf ajax umbauen( hat nicht richtig geklapt.

auf meiner seite gibt es Download Buttons in den News,die sehen so aus:

PHP:
<a href="http://hupsis-e107.de/download.php?view.285" class="dl btn btn-primary">Download</a>

<div class="dlid" data="285"></div>

das div hatte ich zu testzwecken eingefügt da ich die id hier 285 brauche

jquery
Javascript:
var idx = 0;
   $('.dlid').each(function(index, value){
  var dlid = $(this).attr('data');
     $.ajax({
         type    : 'POST',
         cache   : false,
         url     : '".THEME."ajax_datei.php',
         data    : 'id='+dlid,
         success  : function(data) {
           var urlhtml = $('.dl').html();
           var myDivs = $('.dl');
           myDivs.eq(idx).html(urlhtml+' '+data);
           idx++;        
         }
       });
     });

ich möchte folgendes damit erreichen:

downloadcounter für die downloadbuttons

immer wenn die url <a href="download.php?view.285" class="dl btn btn-primary">Download</a>
auf der Seite gefunden wird soll das ajax die Id hier 285 an die php weiterleiten und das response Ergebnis soll in den a Tag eingefügt werden

bei meiner version sieht es jetzt so aus das beim 1 aTag 0 steht beim 2ten 0 2 beim 3ten 0 0

komme so nicht weiter bissel Hilfe währe nett
 
Zuletzt bearbeitet von einem Moderator:
Wenn dein Code nun asynchrone Operationen ausführt (bei dir AJAX), dann funktioniert das mit der Zählvariable nicht mehr so leicht, denn diese wird verändert, dabei sollte aber die Callback-Funktion der asynchronen Operation nur den beim Starten der Operation bestehenden Inhalt der Variablen nutzen. Hier ein einfaches Beispiel: http://jsfiddle.net/5J98F/2/

Versuche mal folgenden Code:
Javascript:
var idx = 0;
var myDivs = $('.dl');

$('.dlid').each(function(index, value){
    var dlid = $(this).attr('data');
    (function (curIdx) {
        $.ajax({
                type: 'POST',
                cache: false,
                url: '".THEME."ajax_datei.php',
                data: 'id='+dlid,
                success: function(data) {
                    myDivs.eq(curIdx).append(data);
                }
        });
    })(idx);
    idx++;
});
Beachte, dass ich die Logik in der Callback-Funktion geändert. Überprüfe bitte, ob das Verhalten, das ich bei deinem Code annahm, mit deinem gewünschten übereinstimmt.

Bitte achte des Weiteren auf konsistente Klein- und Großschreibung, dies kann man viel besser lesen. Und noch ein kleiner Hinweis: Bei Codetags bitte JavaScript angeben, damit das Syntax Highlighting auch aktiviert wird: http://www.tutorials.de/help/bb-codes#codetag
 
Ja, z. B. so:
HTML:
<a href="http://hupsis-e107.de/download.php?view.285" class="dl btn btn-primary">Download</a>
Javascript:
var href = $('dein-link').prop('href');
var id = href.substr(href.lastIndexOf(".") + 1);
Wenn sich der Link ändert (z. B. so, dass am Ende noch ein Punkt vorkommt), dann wird der Code nicht mehr funktionieren. Deswegen würde ich die ID separat z. B. in einem data-Attribut speichern:
HTML:
<a href="http://hupsis-e107.de/download.php?view.285" data-custom-id="285" class="dl btn btn-primary">Download</a>
 

Neue Beiträge

Zurück