2016-06-09 7 views
0

Ich habe versucht, dies seit Stunden zu beheben und kann es einfach nicht zum Laufen bringen. Ich erhalte den Namen jeder Aktivität in der Datenbank und für jede Zeile erstellt es dieses Skript mit den richtigen Daten neu..replace in eval mit dynamischen Variablen in Javascript?

<script>var count = 1;</script> 
    @foreach($data as $scriptdata) 
     <script> 

      eval("var id" + count + " = '{{$scriptdata->activiteit}}';"); 
      eval("var clas" + count + " = '{{$scriptdata->activiteit}}';"); 
      eval("var id" + count + " = id" + count .replace(/[^a-zA-Z]/g, '') + ";"); 
      eval("var clas" + count + " = clas" + count .replace(/[^a-zA-Z]/g, '') + ";"); 



      $("#" + id1).mouseenter(function(event) { 
       console.log("clicked."); 

       var target = $('.' + clas1); 

       if(target.length) { 
        $('html, body').animate({ 
         scrollTop: target.offset().top-120 
        }, 1000); 
       } 

      }); 
      count++ 

     </script> 
     @endforeach 

die Variablen ohne Probleme dynamisch geworden, ich kann einfach nicht, dass .replace bekommen es Arbeit zu tun.

jemand: p

+0

Verwenden Sie ein Objekt mit Klammernotation. Oder ändern Sie es, damit der Bereich keine globalen Variablen verwendet, so dass es überhaupt keine Rolle spielt. – epascarello

Antwort

0

Entweder gibt die Variablen aus dem serverseitigen Code, verwenden, um Objekte mit Klammer-Notation verwenden gemeinsame Klassen, so gibt es keine Notwendigkeit, individuelle Auswahl ist, haben oder es so die Variablen nicht in global tätigen Umfang.

Machen Sie es sich so die Variable nicht im globalen Bereich

(function() { 
    var id = '{{$scriptdata->activiteit}}'; 
    var clas = '{{$scriptdata->activiteit}}'; 

    $("#" + id).mouseenter(function(event) { 

    var target = $('.' + clas); 

    if (target.length) { 
     $('html, body').animate({ 
     scrollTop: target.offset().top - 120 
     }, 1000); 
    } 

    }); 
}()); 

Jetzt müssen Sie sich nicht um Zählung kümmern.