2015-09-21 54 views
0

想要在頁面加載時在搜索字段上設置光標。代碼:Dojo:設置用於輸入的默認文本框

<input class="search-input" 
    data-dojo-type="dijit/form/TextBox" 
    data-dojo-attach-point="searchNode" 
    data-dojo-attach-event="keyup: searchKeyUpEvent" 
    data-dojo-props=" 
    focused: true, 
    placeHolder: 'Search'" /> 

在頁面加載的文本框控件有一個對焦框,但光標是不存在的..

  • 這是一個錯誤?
  • 如何確保光標位於搜索窗口小部件?

編輯: 我會重新短語的問題是:如何做一個集中​​的一些文本框,所以當頁面加載和用戶開始輸入它會出現在文本框默認?

回答

1

花了幾個小時,並嘗試一堆解決方案(沒有一個工作)後,我來了第一個在實際上解決了這個問題 - 使用setTimeout()

window.setTimeout(function(){ 
    _this.searchNode.focusNode.focus(); 
}, 0); 

我不喜歡使用定時器(甚至零定時之一)的想法,但是這可能是幾乎是唯一的解決方案。

3

focused被記錄爲_FocusMixin中的只讀屬性;設置它最初不會做你認爲它做的事情。

要初始集中小部件,您需要從JS獲得對它的引用並調用它的focus方法。

鑑於您已經定義了一個附加點和附加事件,我假設這個小部件是另一個小部件模板的一部分,在這種情況下,您應該能夠將其初始化在模板小部件的startup方法中(儘管取決於如何您的頁/應用程序加載時,有可能是一個更好的時間來做到這一點):

startup: function() { 
    if (this._started) { 
     return; 
    } 
    this.inherited(arguments); 

    this.searchNode.focus(); 
}); 

(我可能會建議不要調用連接點「searchNode」,因爲它是在這種情況下,窗口小部件,而不是一個DOM節點。)

+0

謝謝你的回答。由於某些原因,focus()不起作用。我在startup()中添加了常規的並嘗試了document.getElementById(「foo」)..但是沒有任何反應。它有任何意義嗎? – Oleg

+0

在你的例子中,你也應該使用this.searchNode.focusNode.focus()(因爲focusNode將是一個元素,JS的focus()應該被應用到dom元素而不是widget實例 – Oleg

+1

'focus'是在dijit TextBox小部件(更具體地說,_FormWidgetMixin)上定義的方法,它完全符合您的建議('this.focusNode.focus()')。 –

相關問題