2013-10-31 8 views
18

Ich versuche, die Spitze von einem Element zu erhalten, aber ich bekomme diesen Fehler, was bedeutet es und wie werde ich es loswerden?Was ist prevObject und warum gibt mein Selektor das zurück?

$(".hover").offset().top 

>Uncaught TypeError: Cannot read property 'top' of undefined 

$(".hover") 

[div.hover, prevObject: x.fn.x.init[1], context: document, selector: ".hover", jquery: "2.0.3", constructor: function…] 
[prevObject: x.fn.x.init[1], context: document, selector: ".hover", jquery: "2.0.3", constructor: function…] 

Dies geschieht in dem Drop-Ereignisse von jQueryUI wenn ich versuche, es in eine verschachtelten abwerfbaren fallen zu lassen.

$.fn.makeDroppable = function(){ 
    $(this).droppable({ 
     drop: function(event, ui) { 
      console.log($(".hover")); 
      console.log($(".hover").offset().top); 
      $(".hover").makeDroppable().removeClass("hover"); 
     }, 
     over: function(event, ui) { 
      $("<div>").addClass("hover").appendTo(this); 
     } 
    }); 
} 
$(".container").makeDroppable(); 

<div class="container"></div> 
+0

zeigen Sie Ihre Markup. –

+5

ist, weil es kein Element mit der Klasse 'myelement' auf Ihrer Seite gibt –

+0

@ArunPJohny Es gibt $ (" .Hover ") gibt das Element und prevObject zurück, das mir nicht erlaubt, den oberen Wert zu verwenden. – shuji

Antwort

17

jQuery gibt prevObject, wenn das DOM nicht das Element hat, für die jQuery ausgeführt wird. Möglicherweise sehen Sie das Element in Ihrer Quelle zur Laufzeit, es ist jedoch nicht an das DOM gebunden und zeigt daher prevObject. Versuchen Sie es noch einmal mit Ihrer js-Datei oder fügen Sie den Code hier ein.

6

Obwohl der Fehler nicht prevObject betrifft, werde ich es erklären, da es eine Frage im Titel ist.

jQuery .END()

Beenden der letzten Filteroperation in der aktuellen Kette und gibt den Satz von abgestimmten Elementen in den vorherigen Zustand.

seinen vorherigen Zustand zurückzukehren, kehrt jQuery prevObject, die vor der Filterungsoperation ausgewählte Elemente enthalten, wie .find(), .filter() und .children(), angewandt wird.

Beispiel

$('#target').append($('div').find('input').remove().end()); 

$('div') alle div-Elemente auswählen. --- (* 1)

Dann wählt $('div').find('input').remove() alle Eingabeelemente innerhalb der ausgewählten div-Elemente und löscht diese Eingabeelemente.

Danach wird $('div').find('input').remove().end() die Elemente zurückgeben, bevor .find('input') aufgerufen wird. Daher werden alle div-Elemente wie in (* 1) mit der Ausnahme zurückgegeben, dass alle Eingabeelemente in divs entfernt werden. Die zurückgegebenen Elemente werden in prevObject gespeichert.

Schließlich werden die zurückgegebenen Elemente (* 1) an #target angehängt.


.end() ‚s Dokumentation: https://api.jquery.com/end/

Verwandte Themen