2012-06-01 25 views
0

我有一個小應用程序,通常有一個可見的文本輸入,並按下輸入觸發JavaScript方法,而不會觸發正常的表單提交。這是一個非常簡單的測試案例:如何使用虛擬鍵盤在Opera Mobile中爲簡單表單觸發onsubmit()事件?

<form onsubmit="document.write('form submitted!');return false"> 
    <input type="text"> 
    <input type="submit" style="display:none"> 
</form> 

在桌面瀏覽器可正常工作 - 你輸入的文字,按Enter鍵,腳本執行。

但是,Opera Mobile上的文字輸入功能集中在虛擬鍵盤上,如果輸入文本並點擊「完成」,文本將被傳輸到輸入字段,但表單未提交。也有沒有「輸入」

我希望應用程序跨瀏覽器和設備行爲相同,而不是使提交按鈕僅在Opera Mobile中可見。

回答

0

你必須:

  • 給一個ID到表單
  • 抓下的Opera Mobile的「完成」事件,我怕我不知道名字
  • 得到使用其ID並在done事件中調用其submit()方法。

關於該事件中,我發現了一些信息:

歌劇開發商網站:

歌劇普雷斯托有DOM 2個事件沒有例外的全力支持。

http://www.opera.com/docs/specs/presto2.11/dom2/events/

W3C:

6.1.2.4虛擬鍵盤和鍵盤和絃

虛擬鍵盤是基於軟件的密鑰組,在各種不同的 一般安排,在觸摸屏設備上找到;它們 通常是模態的,能夠在不同的動態密鑰集之間切換,例如字母,數字或符號密鑰。由於缺少物理約束,這些鍵盤可能會呈現最寬範圍的字符,包括表情圖標和其他符號,並且可能不具有由Unicode [Unicode]表示的鍵或由本說明書中定義的鍵值集。然而,只要有可能, 虛擬鍵盤應產生正常範圍的鍵盤事件 和值,以便於創作和兼容現有的 內容。

http://www.w3.org/TR/DOM-Level-3-Events/

基本上不說有關特定觸摸事件的任何東西,不像在webkit的技術。所以,你必須抓住按鍵/上/下,解析keyCode/which屬性,與「完成」(有些警報會給你一個好的)進行比較,然後調用form.submit();方法。

rgds。

+0

這將是美好的,只要你能記住這個事件的名字!我試過Opera的開發人員文檔(和谷歌搜索),但找不到任何提及它。 –

+0

好的,我添加了onkeyup(event)並捕獲了代碼。通過輸入(代碼13)等在桌面上工作正常。但是,觸摸完成似乎不會觸發任何事件。 –

+0

就像我說過的,你必須得到正確的'keycode' /'which',可能不會是13。只需提醒您在觸摸完成時獲得的'keycode' /' – Sebas

0

真有似乎沒有辦法趕上在Opera移動的「完成」按鍵:

  • 它不會觸發的keydown /按鍵,所以沒有鍵碼趕上
  • 既不模糊/ focuslost與每一個密鑰類型
  • 變化/輸入火(焦點停留在現場,甚至打「完成」之後)(所以這之前的方式「完成」)
  • 提交事件永遠不會觸發任何

我看來,像唯一的辦法就是真正顯示「Opera移動」瀏覽器「提交」按鈕。

2

name添加到文本輸入框,Opera將按預期提交表單 (它將在虛擬鍵盤上顯示「執行」而不是「完成」)。

<input name="whatever" type="text" />