2010-11-02 126 views
26

我有一個移動模板,它是一個基於ajax/url哈希瀏覽的登錄表單。如果在iphone上用戶單擊iphone鍵盤上的「go」按鈕,則ajax會對其進行身份驗證/登錄,然後將下一頁加載到另一個div中並隱藏當前登錄表單div。javascript - unfocu一個文本框

問題是,在iphone上鍵盤仍然彈出。無論如何,通過JavaScript來忽略文本框元素?

+0

http://web-design.blogs.webucator.com/files/2010/08/onFocusTShirt.gif :-) – 2013-01-14 14:49:32

回答

48

使用blur()方法或嘗試將焦點設置爲鏈接等其他元素。

+0

有沒有其他辦法?我已經嘗試設置專注於一個div,並沒有工作 – Joe 2010-11-02 05:17:32

+1

好,有'blur()'方法 – Xint0 2010-11-02 05:30:32

+0

工作的魅力!謝謝! – Joe 2010-11-02 07:49:03

3

如果您無法輕鬆訪問想要模糊的特定元素,那麼您可以實現「模糊所有」功能。

就某處添加以下HTML頁面上:

<input id="blur-hack" type="text" style="position: absolute; opacity: 0;"> 

那麼這個JS會以無焦點的當前聚焦什麼:

document.getElementById("blur-hack").focus(); 

注意,對於內嵌HTML樣式,我們不能做display: none否則你不能專注於它。 positionopacity將充分地流動刪除元素 - 你也可以使用利潤率將它推遙遠的頁面等

+2

或者你可以將'height'設置爲0 – Bill 2014-03-12 03:53:48

12

這是我使用時.blur()並不想成爲我的朋友

function blurAll(){ 
var tmp = document.createElement("input"); 
document.body.appendChild(tmp); 
tmp.focus(); 
document.body.removeChild(tmp); 
} 
+2

這真棒,正是我所期待的。我喜歡這個答案,因爲它是獨立的,只是完成這一件事,並沒有留下任何混亂。 – thomasfuchs 2015-09-11 16:26:25

0

這樣可以保持滾動,並且不會造成元素的任何閃光

resetFocus() { 
    let scrollTop = document.body.scrollTop; 
    let body = document.body; 

    let tmp = document.createElement('input'); 
    tmp.style.opacity = 0; 
    body.appendChild(tmp); 
    tmp.focus(); 
    body.removeChild(tmp); 
    body.scrollTop = scrollTop; 
} 

基於@ skygoo的解決方案

0

建立在@shygoo的解決方案上 - 這很好地轉化爲TypeScript!

export function unfocus(): any { 
    const tmp: HTMLInputElement => document.createElement('input'); 
    document.body.appendChild(tmp); 
    tmp.focus(); 
    document.body.removeChild(tmp); 
} 

的一些注意事項...

  1. 這是any型的,這樣它與AngularJS的$timeout服務兼容,即使它實際上從未返回任何東西。
  2. tmp是恆定的,因爲它在函數調用的生命週期中從不改變。