2012-01-14 49 views
2

我試圖通過此代碼將輸入文本的開頭鍵入光標,但沒有成功。什麼是問題?在輸入焦點後觸發主頁按鈕

HTML
<input value="text"/> 
的JavaScript(jQuery的)
$('input').focus(function(){ 
    $(this).delay(100).trigger(jQuery.Event("keydown",{keyCode: 36, which: 36})); 
}); 

住在JSBin

回答

1

所以,這個問題並不是真的迫在眉睫,而是將光標移到texbox的開頭。

檢查這個答案:move cursor to the beginning of the input field?
通常的做法是正確的,但它似乎不工作直接

我已經修改,以適合您的jQuery的焦點案例:

$('input').focus(function(){ 
    var input = this; 
    // for some reason, putting directly doesn't work 
    setTimeout(function() { 
     if (input.createTextRange) { 
       var part = input.createTextRange(); 
       part.moveat("character", 0); 
       part.moveEnd("character", 0); 
       part.select(); 
      } 
     else if (input.setSelectionRange){ 
       input.setSelectionRange(0,0); 
     } 
    }, 0); 
}); 

直播例如:
http://jsfiddle.net/sF334/

如果你想觸發自己的焦點,那麼你可以這樣做:

$('input').trigger('focus'); 
// use some unique selector instead in real example, like ID 

注意它焦點的第一個字符前返回,但允許您只要您更改焦點回來移動,後來更改的選擇,如你所願,它會再次返回到初始位置。

+0

'setTimeout'是多餘的IMO – Mohsen 2012-01-14 21:32:36

+0

出於某種原因,當我在jsfiddle中嘗試時,沒有它就無法正常工作。 – Meligy 2012-01-14 22:47:10

3

這看起來像是過思考問題的情況下,或者沒有正確地描述它。焦點的默認行爲是將光標置於文本的開頭。只是這樣做:

$(function() { 
    $('input').delay(100).trigger('focus'); 
}); 

不知道爲什麼你需要延遲。使用所示的jQuery就緒事件可以消除延遲。

+0

如果文本是空的,它會來到文本的開頭,因爲沒有其他位置,如果文本框中有文本,默認焦點行爲是選擇所有文本。如果在選擇所有文本時按Home鍵,則會將光標返回到第一個字符之前的位置。 – Meligy 2012-01-14 02:53:31