2017-09-11 1 views
0

Ich habe eine PHP-Datei, die oft benötigt wird, enthält ein kleines jquery-Snippet, das bei jeder Instanz der PHP ausgeführt werden soll Datei ist enthalten. Jedoch scheint jQuery am Ende alle gleichzeitig zu laufen, weil ich Variablenwerte auf einmal anstelle von jeder Instanz erhalte. Also meine PHP-Datei, die eine andere PHP-Datei an, wie oft beinhaltet ist
base-features.phpEine PHP-Datei mehrfach einfügen, die jquery-Skript enthält, Skript läuft nicht bei jeder Instanz

<?php 

    $youtubelinks = array(
     '0' => 'https://www.youtube.com/embed/NilASeqRsjw' 
     '1' => 'https://www.youtube.com/embed/eXG8PbwmUJw' 
); 

    foreach($youtubelinks as $key => $val) { 
    $ytlink = $val; 
    require('youtubelink.php'); 

    } 

Auf meinem youtubelink.php kann ich die $ytlink Variable

<div id="page-corporate-video-overlay" class="page-corporate-video-overlay"> 
    <div class="container"> 
     <div class="row block"> 
      <div class="col-md-12"> 
       <?php print $ytlink ?> 
       <p><span class="video-play-icon"></span><p> 
      </div> 
     </div> 
    </div> 
    </div> 
<div class="page-corporate-video"> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-md-12"> 
       <div class="inner"> 
        <iframe id="corporate-video" class="page-corporate-video-iframe" width="100%" height="100%" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 


<!--The jquery script I am having problem with--> 
<script type="text/javascript"> 
    jQuery(document).ready(function() { 
     var videoYoutube = "<?php print $ytlink; ?>" 

    $('.page-corporate-video-overlay').click(function() { 
     $('html, body').animate({ 
      scrollTop: $(this).closest("div.page-corporate-video-overlay").offset().top-15 
     }, 500); 

     $(this).hide(); 

     console.log(videoYoutube); 
     $(this).closest('div.base-feature').css({'background-image':'none','height':'auto'}); 
     $(this).next('div.page-corporate-video').find('.page-corporate-video-iframe').attr('src',videoYoutube+"?controls=0&rel=0&showinfo=0&enablejsapi=1&autoplay=1&modestbranding=1&theme=light"); 
     $(this).next('div.page-corporate-video').show(); 
    }); 
}); 

so sehen, wenn ich auf klicken .page-corporate-video-overlay', I get two values of the videoYoutube `Variable. Dies führt zu Problemen beim Einbetten des richtigen Videos in den Iframe, da nur der letzte Wert eingebettet wird und nicht jeder Iframe während jeder Schleifeninstanz den relativen Youtube-Variablenwert erhält.

+0

Dieses Bit '$ ('. Page-corporate-video-overlay')' durchläuft jedesmal * alle * der '.page-corporate-video-overlay'-Divs. Es bleibt also nur der letzte übrig, da die vorherigen überschrieben wurden. –

+1

Betrachten Sie einen Refactor - setzen Sie '$ ytlink' als' data-ytlink' in das '.page-corporate-video' div und verwenden Sie dann eine einzige jquery doc ready-Methode (nicht die gleiche pro Link), die' videoYoutube' lautet aus dem Datenattribut. –

+0

@ freedomn-m Vielen Dank für Ihre schnelle Antwort und sehr hilfreich Refactoring-Vorschlag. Ich habe genau das getan, was du gesagt hast, und ich habe es zum Laufen gebracht. Ich werde eine Antwort basierend auf Ihrem Refactoring-Vorschlag posten. –

Antwort

0

Dank @ freedomn-m's Kommentar habe ich meinen Code nach seinem Vorschlag refaktoriert.

Refactoring youtubelink.php

Alles ist fast das gleiche, außer ich ein zusätzliches Attribut für das div.page-corporate-video-overlay von data-ytlink ="<?php print $ytlink;?>" und auf meinem Jquery in meiner Klick-Funktion Ereignis hinzugefügt I

hinzugefügt
var videoYoutube = $(this).attr('data-ytlink'); 

Jetzt kann ich einbetten Videos richtig.

Verwandte Themen