2017-09-15 64 views
14

背景: 我有一個文本。我在用戶輸入時捕獲Tab鍵事件,並且插入Tab字符(\ t)並阻止瀏覽器關注下一個輸入。 在Mac和PC上,這在所有瀏覽器上都沒有問題。IOS藍牙鍵盤 - 輸入 - 選項卡事件

問題: 當使用連接到iPad的藍牙鍵盤時,這不起作用。文檔註冊了tab鍵事件,但只要我專注於textarea,所有tab鍵事件都會被忽略並不會發送到瀏覽器。我也用文本輸入進行了測試,並看到相同的結果。

實施例:https://plnkr.co/edit/NQvxijj3ISZ0B48fSHvi?p=preview

簡單聽者:

$(function(){ 
    $("body").bind("keydown",function(e){ 
    $("#bodyLog").append($("<div/>").html(e.keyCode)); 
    return e.preventDefault(); 
    }); 
}); 

當你有選擇的體(不是TEXTAREA),tab鍵事件登記和數字9次出現。任何其他關鍵事件也會出現。

當你有選擇的文本區域,所有的keydown事件被登記在身體監聽器和監聽textarea的......除了tab鍵兩者。

如果任何人有一個解決方案,我將永遠感激。

編輯 我已經觀看了5位,然後轉換,爲製表符「固定」的問題。

我研究這個,只能推測,當集中在輸入/文本域iOS不希望釋放TAB鍵的控制。我曾嘗試訪問Google文檔等網站,看看它們是否已經繞過它,但它們強制您下載該應用程序,而不是允許您在iOS上的Safari內編輯文件。我猜這是因爲iOS想要完全控制Tab鍵。我在iOS上嘗試過Chrome,但功能相同,所以我會說這不是Safari問題,而是iOS問題。

一個可能的但未經測試的解決方法是將整個<div>編碼爲textarea,然後用div替換textarea。由於tab鍵適用於所有其他元素,因此它在理論上應該可行,但它需要相當多的Javascript和CSS才能使元素像另一個元素一樣工作。

EDIT 2

我已經發現,使用選項+ Tab鍵可以讓Tab鍵在文字區域被捕獲。我不覺得這是令人滿意的。當我在普通鍵盤上輸入段落時,我不鍵入Option + Tab,我只是鍵入Tab。據我所知,無法在textarea中單獨捕獲Tab鍵。

+0

按下iOS鍵盤上的OPT +選項卡是否與非儀器鍵盤上的選項卡執行相同的操作? –

+0

您是否嘗試過使用http://dmauro.github.io/Keypress/? –

+0

這太奇怪了。你認爲這與iOS Safari的怪異有關嗎? https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html –

回答

0

您可以嘗試以使用this library有這些事件:

  • previousbuttonclick
  • nextbuttonclick

然後,當你發現的元素旁邊的textarea的重點是你回來給你的textarea並插入任何你想要的。

+0

如果你想要賞金,我希望看到一些代碼會使用這個庫產生問題的效果。據我所知,它仍然不起作用。 –

+1

@TimWithers我沒有回覆賞金,只是爲了幫助你... –

0

我相信這是iOS中標籤的已知問題。我在stackoverflow上找到類似的question。只需在您的代碼之前添加此黑客:

var oldAddEventListener = EventTarget.prototype.addEventListener; 
EventTarget.prototype.addEventListener = function(eventName, eventHandler){ 
    oldAddEventListener.call(this, eventName, function(e) { 
     if(e.target.id === "textarea" && e.keyCode===9){ 
     e.preventDefault(); 
     } 
    eventHandler(e); 
    }); 
}; 

請檢查,它應該工作。 Example

+0

你提交的plnkr沒有上面的代碼。它不工作,或者上面的代碼被複制和粘貼。你想讓我測試一個不同的plnkr嗎? –

+0

您鏈接的問題其實是我一年前的問題。仍然沒有滿意的決議。 –

+0

哈哈,對不起(:您是否嘗試過我以前版本的答案? – Firanolfind