2010-02-24 16 views
4

我有很多在頁面加載中運行的jquery,它導致我的一個元素消失(使其style = display:none;)。我猜jQuery的hide()函數被錯誤地應用於這個元素,但是我找不到哪個語句導致它。檢測什麼JavaScript函數正在改變加載頁面元素?

是否有任何JavaScript,螢火蟲等功能或工具,將本質上作爲html元素(也許我可以在我的瀏覽器中運行一個)的斷點/監聽器?在頁面加載中看到哪個函數影響該元素會很高興。

+0

你可能會被卡住只是有選擇地評論事物,並觀察它何時破裂... – 2010-02-24 22:52:55

回答

1

您可以在getter/setters中找到元素的訪問位置。然而,setter方法似乎不使用鉻工作...它的工作原理與雷區[火狐β的最新版本,但...所以你可以測試一下我猜=)

myElement.style.__defineSetter__("backgroundColor", function(val) 
{ 
    var cur = arguments.callee; 
    var callLog = ""; 
    while(cur != null) 
    { 
    callLog = cur.caller + "\n" + callLog; 
    //alert(cur.caller); 
    cur = cur.caller; 
    } 
    alert(callLog); 
} 
); 

哦,但它不會讓你真正「設置」變量。要做到這一點,你需要定義一個虛擬變量並設置它。然後,當你定義你的獲得者[與__defineGetter__]你返回該值

+0

+1 - 我不知道這件事,所以這是一個很好的發現。儘管不是提醒出棧,但可以通過將函數設置爲'function(){debugger; }' – nickf 2010-02-24 23:33:01

4

哈!我剛剛找到了我想要的答案。 Firebug在HTML選項卡上有一個「break mutate」功能,它將顯示javascript文件中的哪一行正在更改html元素。它是在Firebug 1.5中,今天發佈的1.5.2新版本更新了這個圖標,所以我注意到它,並發現它完全是靠運氣!

http://www.softwareishard.com/blog/firebug/firebug-15-break-on-next/

感謝您嘗試傢伙!

+0

另外,Firebug的斷點參考在一般情況下非常有用:http://getfirebug.com/doc/breakpoints/demo.html – 2010-02-25 18:31:28

相關問題