2011-10-22 60 views
4

我想模擬Google搜索效果,即使搜索框未聚焦,用戶也可以開始輸入,輸入框將捕獲所有鍵盤筆劃。模擬「ontype」事件

我已經找過ontype事件,但還沒有找到任何東西。我知道click等事件的回調中的event對象具有鍵盤信息,但我不認爲這是我所追求的。

+1

怎麼樣'onkeypress'或'onkeyup' – Rafay

+0

文件.onkeypress – marko

+0

更新了我的答案。顯然沒有必要捕捉角色,改變目標會發揮魔力。 –

回答

4

這做工作:

$(document).on('keydown', function() { 
    $('input').focus(); 
}); 
+0

是的,這是可行的,但由於您的輸入是'document'的一部分,每次您在輸入字段中輸入內容時,此函數也會運行並將焦點輸入到已具有焦點的輸入。還有一種更優雅的方式。我會更加強化我的答案。 –

3

HTML:

<input type="text" id="txtSearch" /> 

的Javascript:

var googleLikeKeyCapture = { 
    inputField : null, 
    documentKeydown: function(event) { 
     var inputField = googleLikeKeyCapture.inputField; 
     if(event.target != inputField.get(0)) { 
      event.target = inputField.get(0); 
      inputField.focus(); 
     } 
    }, 
    init: function() { 
     googleLikeKeyCapture.inputField = $('#txtSearch'); 
     $(document).bind('keydown', googleLikeKeyCapture.documentKeydown); 
     googleLikeKeyCapture.inputField 
      .focus(function() { 
       $(document).unbind('keydown'); 
      }) 
      .blur(function() { 
       $(document).bind('keydown', googleLikeKeyCapture.documentKeydown); 
      }); 
     googleLikeKeyCapture.init = function() {}; 
    } 
}; 

$(googleLikeKeyCapture.init); 

您也可以找到的jsfiddle例如here

編輯:

而現在它是一個jQuery plugin。 :)如果keydown發生在textarea或輸入字段中,它不會捕獲鍵,否則其他任何內容都會轉到指定的輸入字段。如果您的選擇器匹配多個元素,則它只使用第一個元素。

用法:$('#txtSearch').captureKeys();

+0

什麼是行'googleLikeKeyCapture.init = function(){};'for?爲了避免內存泄漏? – Randomblue

+0

這是一種習慣。它可以防止多次初始化對象。 –