2013-10-31 379 views
18

我試圖從一個元素獲得頂部,但我得到這個錯誤,它是什麼意思,我該如何擺脫它?什麼是prevObject,爲什麼我的選擇器返回?

$(".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…] 

這發生在jqueryui的drop事件中,當我嘗試將它放入嵌套的droppable中時。

$.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

顯示您的標記。 –

+5

這是因爲你的頁面中沒有class myelement的元素 –

+0

@ArunPJohny有,$(「。hover」)返回元素和prevObject不允許我使用最高值。 – shuji

回答

17

如果DOM沒有爲其運行jQuery的元素,jQuery將返回prevObject。您可能在運行時在源代碼中看到元素,但它並不是綁定到DOM,因此它顯示prevObject。嘗試再次檢查您的js文件,或者在此處粘貼代碼。

6

雖然錯誤與prevObject無關,但我會解釋它,因爲這是標題中的問題。

的jQuery .END()

結束最近濾波操作在當前鏈和匹配的元素返回到其先前的狀態。

要返回其先前的狀態,返回的jQuery prevObject包含濾波操作之前選擇的元素,如.find().filter().children()和被施加。

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

$('div')將選擇所有div元素。 --- (* 1)

然後,將$('div').find('input').remove()選擇所選div元素內的所有的輸入元件和刪除這些輸入元件。

之後,$('div').find('input').remove().end()將返回調用.find('input')之前的元素。因此,它將返回與(* 1)中相同的所有div元素,但div中的所有輸入元素都將被刪除。 返回的元素存儲在prevObject中。

最後,返回的元素(* 1)附加到#target


.end()的文檔:https://api.jquery.com/end/

相關問題