2016-02-12 189 views
0

背景:我有一個包含視頻作爲學習資源的asp.net頁面。當用戶完成觀看視頻時,會將其標記爲「已觀看」,並在SQL數據庫中創建一個條目。document.getElementById(...)在頁面加載後爲空

方法:我有一些JS當視頻完成檢測,然後觸發一個JS函數,觸發一個隱藏的ASP:按鈕的點擊事件,這反過來又觸發一個vb.net代碼隱藏功能,使一些視覺上的變化顯示該部分的視頻已被觀看。

問題:當視頻完成時,JS功能大火卻無法再找到ASP:通過ID按鈕

TypeError: document.getElementById(...) is null 

代碼:

<asp:button runat="server" ID="videoEndedButton" Text="SubmitVideo" style="display:none;" onclick="videoEndedButton_Click" /> 

<script type="text/javascript"> 
    document.getElementById('pdp_video_rta').addEventListener('ended', videoEnded, false); 
    function videoEnded(e) { 
     document.getElementById("videoEndedButton").click 
    } 
</script> 

爲什麼不能JS函數找到asp:按鈕(在頁面加載後很久)。我可以單擊按鈕並運行代碼隱藏功能(當它未隱藏時)。

回答

1

使用這樣的:

document.getElementById('<%= videoEndedButton.ClientID %>').click(); 

因爲 ASP 服務器端ID 需要轉換客戶端ID。

+0

啊,這是我所需要的,並解決了我的問題。我試圖將目標作爲一個HTML客戶端元素的asp服務器端元素。謝謝。 – Ryan

0

對於你的asp:Button,你需要添加屬性ClientIDMode =「Static」。

+0

這對我的情況沒有任何影響。 – Ryan

+0

您還需要在document.getElementById(「videoEndedButton」)中單擊「()」。也可能需要爲videoEndedButton元素指定ClientIDMode =「Static」。 –