2011-10-10 59 views
3

我面臨或多或少同樣的問題描述here(即我有被點擊編程時,一個標籤後獲得焦點提交輸入項目,但重點處理程序也被調用時用戶點擊按鈕,導致雙重提交)。鏈接帖子中建議的解決方案工作,但我需要一個不需要jQuery的解決方案。有沒有人對此有過一些想法?請注意,我需要按鈕的點擊行爲保持不變,因爲它綁定到一個asp.net服務器端事件。謝謝!防止專注於普通的JavaScript按鈕點擊

回答

2

你要防止從形式提交,以便添加事件偵聽器,然後你想怎麼JavaScript來處理提交表單代碼。還要問你如何在不依賴任何框架的情況下如何勝任代碼編寫的問題! :-)

一些粗糙的代碼給你如何防止提交表單的想法...

if (window.addEventListener) 
{ 
forms[i].addEventListener('submit',function(e) {e.preventDefault(); eval(id_forms[e.target.id]+'();');},false); 
} 
else if (window.attachEvent) 
{ 
forms[i].attachEvent('onsubmit',function(e,f) {e.returnValue=false; eval(id_forms[e.srcElement.id]+'();');}); 
} 
+0

感謝您的回答。該解決方案看起來不錯(可能減去使用eval :))。我已經實施了另一種方法,我忘了在這裏寫下來,所以我會這樣做,但要給你答案。 –

+0

我使用eval謹慎,這段代碼實際上是我如何防止從形式提交我的網站上這樣我就可以了JavaScript處理他們,而不是一部分。我仍然處理JavaScript禁用時提交的表單,並在啓用JavaScript時通過追加?ajax = 1來確定差異。 – John

2

我結束了與具有使用keyUp和的keyDown處理程序中,我設置/取消一個isKeyPressed變量。這是我的理解是,按Tab鍵,當這種情況發生的事件的順序如下:

  • 的keyDown
  • 重點虎子
  • 使用keyUp

因此,在焦點事件處理程序我檢查重點是通過製表(即如果isKeyPressed設置爲true)並在那裏提交表單。否則,如果在click()後獲得焦點,isKeyPressed將不會被設置爲true,並且我不會以編程方式觸發表單提交。

+0

事件是基於DOM,而不是從JavaScript中,可以在這裏找到所有地方的好名單:http://en.wikipedia.org/wiki/DOM_events – John