2012-10-26 23 views
5

Próbuję napisać podstawową platformę blogowania, a ja chcę zaoferować użytkownikom możliwość kopiowania kodu w przedziale blokowym do schowka.Jak mogę wkleić() klip ZeroClipboard do nowo wstawionego elementu?

Używam do tego celu ZeroClipboard. Gdy dokument jest gotowy, ja pętli każdego pre na stronie, dodanie elementu schowka do niego w następujący sposób:

$(document).ready(function() { 

     ZeroClipboard.setMoviePath('ZeroClipboard/ZeroClipboard.swf'); 
     var preNum = 1 

     $('pre').each(function() { 
      // Get a unique id for the element I will be inserting 
      var id = 'copy-btn-' + preNum++ 
      // Capture the text to be copied to the clipboard 
      var text = $(this).text() 
      // Insert the element, just before this 
      $('<div class="copy-btn" id="' + id + '-cont"><i class="icon-file icon-white" id="' + id + '"></i></div>').insertBefore(this) 
      // Capture the newly inserted element 
      var elem = $(this).prev() 

      // Create the clip, and glue it to the element 
      var clip = new ZeroClipboard.Client(); 
      clip.setText(text) 
      clip.glue(elem) 
     }) 
    }); 

gdy próbuję to zrobić, javascript raportów konsoli: Uncaught TypeError: Cannot read property 'zIndex' of undefined

mojego obecnego zrozumienie problemu polega na tym, że wstawiony element nie jest jeszcze dostępny w domenie, gdy próbuję przykleić do niego klips, dlatego nie występuje klejenie.

Ktoś wie, w jaki sposób mogę to osiągnąć?

Odpowiedz

2

Z Gluing instructions:

można przechodzić w elemencie DOM ID (patrz powyżej), lub odnoszące się do rzeczywista sam obiekt elementu Dom.

Twój kod nie działa, ponieważ przekazujesz do niego obiekt jQuery.

można przekazać identyfikator:

clip.glue(id + '-cont') 

lub rzeczywistej odniesienia elementu Dom:

clip.glue(elem[0]) 

W powyższym przykładzie wykorzystuje się skrót dla .get() jQuery metody nawigacji.

+1

Świetne połączenie. Dzięki za pomoc. – finiteloop