2011-04-18 99 views
4

我試圖在我們網站的主頁上粘貼新聞滾動條。我收到「Object Required」錯誤消息

我有點被我得到,因爲我明白了一臺電腦上,但沒有其他錯誤信息混淆:

必選對象

我使用下面的代碼,但以下行不斷拋出Object Required錯誤,當我使用這個文件作爲web用戶控件在我default.aspx page

el2.style.height='<%=box_height %>'; 

作爲結果,新聞不滾動。

任何幫助極大的讚賞。

<a href="#"><uc1:NewsScroller ID="NewsScroller1" runat="server" /></a> 

<script language="VB" runat="server"> 
    Public box_TextColor As String = "black" 
    Public box_height As Integer = 150 
    Public box_width As Integer = 166 
    Public box_padding As String = "0 0 0 20"  
</script> 

<script type="text/javascript" for="window" event="onload"> 
// <!CDATA[ 
    return window_onload() 
// ]]> 
</script> 

<script type="text/javascript"> 
// <!CDATA[ 

// <!-- 
    var speed = 2; 
    function init(){ 
     var el = document.getElementById("newsdiv"); 
     el.style.overflow = 'hidden'; 
     el.style.height='<%=box_height %>'; 
     el.style.width='<%=box_width %>'; 
     el.style.padding='<%=box_padding %>'; 
     el.style.color='<%=box_TextColor %>'; 

     var el2 = document.getElementById("newsdiv-p1"); 
     el2.style.height='<%=box_height %>'; 
     var el3 = document.getElementById("newsdiv-p2"); 

     el3.style.height='<%=box_height %>'; 
     //alert(document.getElementById("newsdiv-p2").style.height+document.getElementById("newsdiv-p2").style.height); 
     scrollFromBottom(); 
    } 

    var go = 0; 
    var timeout = ''; 
    function scrollFromBottom(){ 

     clearTimeout(timeout); 
     var el = document.getElementById("newsdiv"); 
     if(el.scrollTop >= el.scrollHeight-'<%=box_height %>'){ 
      el.scrollTop = 0; 
     }; 

     el.scrollTop = el.scrollTop + speed; 
     if(go == 0){ 
      timeout = setTimeout("scrollFromBottom()",50); 
     }; 
    } 

    function stop(){ 
     go = 1; 
    } 

    function startit(){ 
     go = 0; 
     scrollFromBottom(); 
    } 
// --> 

    function window_onload() { 
    init(); 

} 
// ]]> 
</script> 


<%--<asp:Panel ID="newsdiv" runat="server" onmouseout="startit();" onmouseover="stop();">--%> 
    <div id="newsdiv" onmouseout="startit();" onmouseover="stop();" > 
     <p id="newsdiv-p1" class="spacer"></p> 
     <asp:Label ID="lblNews" runat="server" Text="News..."></asp:Label> 
     <p id="newsdiv-p2" class="spacer"></p> 
    </div> 
<%--</asp:Panel>--%> 

@Marcel,我想你的意思是源代碼(右鍵單擊,查看源代碼並複製代碼)?

如果是這樣,這是又一次,感謝

<script type="text/javascript" for="window" event="onload"> 
// <!CDATA[ 
return window_onload() 
// ]]> 
</script> 

<script type="text/javascript"> 
// <!CDATA[ 

// <!-- 
var speed = 2; 

$(document).ready(function init(){ 
    var el = document.getElementById("newsdiv"); 
    el.style.overflow = 'hidden'; 
    el.style.height='150'; 
    el.style.width='166'; 
    el.style.padding='0 0 0 20'; 
    el.style.color='black'; 

var el2 = document.getElementById("newsdiv-p1"); 

    el2.style.height='150'; 
var el3 = document.getElementById("newsdiv-p2"); 

    el3.style.height='150'; 
    //alert(document.getElementById("newsdiv-p2").style.height+document.getElementById("newsdiv-p2").style.height); 
    scrollFromBottom(); 


}); 
var go = 0; 
var timeout = ''; 
function scrollFromBottom(){ 

    clearTimeout(timeout); 
    var el = document.getElementById("newsdiv"); 
    if(el.scrollTop >= el.scrollHeight-'150'){ 
    el.scrollTop = 0; 

    }; 
    el.scrollTop = el.scrollTop + speed; 
    if(go == 0){ 
    timeout = setTimeout("scrollFromBottom()",60); 
    }; 
} 

function stop(){ 
    go = 1; 
} 

function startit(){ 
    go = 0; 
    scrollFromBottom(); 
} 
// --> 

function window_onload() { 
init(); 

} 

// ]]> 
</script> 
<div id="newsdiv" onmouseout="startit();" onmouseover="stop();" > 
<p id="newsdiv-p1" class="spacer"> 
    </p> 
    <span id="NewsScroller1_lblNews"><a href='#' OnClick=javascript:window.open('newsDetail.aspx?NewsID=10','NewsDetail','width=800,height=600;toolbar=no;');><font face='verdana' size='2' color='#184D68'>Steve's Birthday</font><br><br><a href='#' OnClick=javascript:window.open('newsDetail.aspx?NewsID=15','NewsDetail','width=800,height=600;toolbar=no;');><font face='verdana' size='2' color='#184D68'>Our Anniversary</font><br><br><a href='#' OnClick=javascript:window.open('newsDetail.aspx?NewsID=14','NewsDetail','width=800,height=600;toolbar=no;');><font face='verdana' size='2' color='#184D68'>Jessie's Birthday</font><br><br></span> 
    <p id="newsdiv-p2" class="spacer"></p> 
</div> 

我仍然在試圖總結我的頭在這個偉大的論壇是如何工作的。昨天,我能夠看到一個按鈕,上面寫着「添加評論」。從今天起,我一直無法看到它。我想我的問題是,你如何重新登錄,以便你能夠添加評論等?登錄似乎是由cookie驅動的,這意味着一旦關閉瀏覽器,您的權限就會消失,不是嗎?

+0

由於不同的JS引擎,錯誤等,所有這一切發生在不同的瀏覽器中。 – 2011-04-18 13:46:36

+2

@Tomas:這是一個*非常*般的評論,你可以放在關於web開發的幾乎所有問題之下,不,這不是麻煩的原因。這個案例。 – 2011-04-18 14:00:02

+0

您可以顯示HTML發送到瀏覽器時的樣子嗎?我不能'讀'ASP.net並擔心那部分'asp:Panel ID =「newsdiv」...會干擾你的#newsdiv(ID不僅區分大小寫,而且必須是唯一的)。順便說一句,'setTimeout(「scrollFromBottom()」,50)'不是**如何使用'setTimeout',不要向它提供字符串,它有和使用'eval'一樣的陷阱。在這種情況下,只需使用'setTimeout(scrollFromBottom,50)'。 – 2011-04-19 10:49:19

回答

0

將您的腳本標記放在newsDiv之後。我認爲問題的出現是因爲html還沒有渲染。

+0

你們真是太棒了。爲什麼要花這麼長時間才能發現這個好地方。 @Marcel Korpel,我曾嘗試過你的建議,現在再試一次,但我想我做得不對,因爲它沒有幫助。你們可以幫我重新安排一下,因爲我仍然在努力處理js。非常感謝所有。這些都是很棒的迴應。 – simflex 2011-04-18 14:07:12

+0

@simflex,請評論我的答案,因爲如果你打電話給我,我還沒有參加談話,我將不會收到通知。無論如何,你的意思是「這不是幫助」?你現在的代碼是什麼樣的?你可以在你的問題中調整代碼嗎? – 2011-04-18 15:02:01

+0

請原諒我@Marcel和你所有的好幫手。在我被要求離開之前,我沒有得到迴應的機會。我已經更新了我可以從你的帖子確定的js。 「Object Required」錯誤消失了,但文本不像正在用我測試的另一臺PC那樣滾動。再次,非常抱歉遲到的迴應。這不是故意的,也非常感謝你的幫助。 – simflex 2011-04-18 23:11:46

1

在開始與之交互之前,您需要確保DOM已準備就緒。

我建議使用jQuery並在.ready()事件處理包裹的DOM交互代碼,就像這樣:

$(document).ready(function(){ 
    init(); 
}); 

這樣,你可以肯定的是所有的元素存在,你開始引用之前如在規定的jQuery API reference

傳遞給。就緒(的處理)是 保證後 DOM準備好執行,因此,這通常是附着在 最好的地方所有其他事件 處理程序並運行其他jQuery代碼。

+0

感謝您的及時迴應。我應該將哪些函數包裝到所有的函數中? – simflex 2011-04-18 14:01:00

+0

@simflex ::如果你只是將調用包裝到'init()'並刪除'window_onload'的東西,那應該沒問題。但是,也請參閱@Marcel Korpel的答案。 – Town 2011-04-18 14:03:33

5

在這種情況下,錯誤消息'Object required'表示變量el2不包含HTMLElement對象。

ID元素的是區分大小寫的,因此在使用

var el2 = document.getElementById("newsDiv-p1"); 

而且,你不能訪問沒有被渲染的元素卻不能獲得元素

<p id="newsdiv-p1" class="spacer"></p> 

。把你的函數放在onload處理程序中,或標記之後,

順便說一句,language屬性script元素has been deprecated很久以前。


更新:這段代碼

<script type="text/javascript" for="window" event="onload"> 
// <!CDATA[ 
    return window_onload() 
// ]]> 
</script> 

使用一個IE-specific way附加的事件處理程序。 永遠不要使用它!

相反,使用DOM level 2 method或只是

window.onload = window_onload; 
+0

馬塞爾+1,很棒的地方。 – Town 2011-04-18 14:02:39

+0

好的,嗯,我得到@馬塞爾關於JavaScript的大小寫敏感性的觀點。對不起,有點慢。 – simflex 2011-04-18 14:13:11

0

確保你有你的頁面可用的Java腳本函數。在沒有方法可訪問的情況下,有時會出現這樣的錯誤。