簡體   English   中英

按鈕點擊事件不會在首次點擊時觸發,但始終會在后續點擊時觸發

[英]Button click event won't fire on first click, but always fires on subsequent clicks

我正在處理一個大型的asp.net項目(對ASP.NET來說是新的),並且我遇到了一些動態添加的按鈕的問題,這些按鈕在首次單擊時不會觸發其單擊事件。 奇怪的是,這種情況並不總是發生; 有時它們在第一次單擊時就可以正常工作,而在其他情況下,如果我運行該項目並按照完全相同的步驟操作,則按鈕在第一次單擊時將不起作用。

這是一些背景...

有問題的頁面用於將某些內容的不同版本部署到客戶端。 該頁面具有包含一堆表的UpdatePanel,並且在任何給定時間僅其中一個表可見。 每個表代表類似向導的工作流程的不同“屏幕”。 因此,在加載頁面時,第一個表可見,而其他所有表都不可見,並且第一個頁面具有一個單選按鈕列表,其中包含部署類型和一個Continue按鈕。 單擊“繼續”按鈕時,將為下一個“屏幕”加載一些數據,並使第一個表不可見,而使下一個表可見。

現在,您已經對問題有了一些了解...

其中一個表上有一個空的手風琴,單擊上一個“屏幕”的“繼續”按鈕時,將使用數據庫中的數據動態填充手風琴; 每個主要版本都有一個窗格,每個窗格中都有一個表,每個次要版本都有一行。 這些行中的每一行都有版本號,部署狀態和操作按鈕,該按鈕使用戶可以部署版本,或者如果用戶已經部署了版本,則可以重新部署。 無論如何,這些操作按鈕是我有問題的地方,這些按鈕有時在第一次單擊時不起作用。 就像我說的那樣,這些按鈕是在單擊事件中從上一個“屏幕”上的“繼續”按鈕創建的,我設置了每個按鈕的ID,並將該事件鏈接到創建按鈕時的單擊事件。 我可以對此進行調試,並看到沒有添加任何事件處理程序,但是,當我第一次單擊按鈕時(這實際上是不一致的;有時它們是第一次工作!),他們什么也沒做,但在第二次單擊時,它們可以正常工作。 我有一個稱為populateAccordion()之類的方法,該方法負責從數據庫實際加載數據並創建帶有按鈕的記錄。 如果是回發,則在page_load上調用此方法,但前提是先前的“屏幕”中緩存的選擇不為空(即,我在先前的“屏幕”中緩存subjectId和centerId,並且僅當它們不為null時才加載手風琴數據) 。

這太過復雜了,無法發布代碼,但是沒有人知道什么地方可能出什么問題,或者我怎么知道嗎? 我已經進行了很多調試,並且總是在上一個屏幕的“繼續”按鈕單擊以及隨后的每個page_load上正確調用populateAccordion(),並且在其中創建按鈕時,Click事件始終會正確連接方法,所以我不知道為什么第一次嘗試時不會觸發click事件。

問題類似於本文中提到的問題...

https://stackoverflow.com/a/2784140/1246574

但是我絕對要為所有按鈕設置ID,因此該文章中提到的解決方案並不是解決我的問題的方法。

我還閱讀了很多其他文章,這些文章說將您的代碼從Page_Load移到Page_PreRender,但是在這種情況下並沒有改變。 它的行為完全相同。

我也嘗試設置按鈕的UseSubmitBehavior = false,但是沒有運氣。

謝謝!

這可能是延遲問題。 聽起來您可以在頁面完全加載所有JS之前單擊控件。 那里有一個onload()函數嗎? 也許您可以嘗試隱藏控件,直到頁面加載完成?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM