2015-07-11 93 views
3

我正在使用聚合物的iron-autogrow-textarea。我能夠設置自動對焦屬性和它的工作非常好。Polymer autogrow textarea focus()不起作用

但是,當我嘗試將焦點設置回textarea它似乎不工作。

我已經試過

autoTextArea.focus(); 

它沒有工作

setTimeout(function() { 
    $('#autoTextArea')[0].focus(); 
    }, 1000); 

這不起作用

setTimeout(function() { 
    $('#autoTextArea')[0].setAttribute('autofocus', true); 
    }, 1000); 

這顯然沒有工作的自動對焦功能僅適用於準備()。

我也嘗試訪問autogrow-textarea裏面的textArea,甚至看起來沒有工作。

有沒有辦法可以做到這一點?

在此先感謝。

這裏是我使用它的代碼片段。

'click #chatEnter': function(e, template) { 
    var chatArea = $('#chatArea')[0]; 
    var chatTextArea = $('#chatTextArea')[0]; 

    if(chatTextArea.bindValue) 
    { 
     var chatNode = document.createElement('chat-message'); 
     chatNode.setAttribute('color', '#ff00ff'); 
     chatNode.setAttribute('avatar', '/src/someimage.jpg'); 
     chatNode.setAttribute('username', 'SomeName1'); 
     chatNode.setAttribute('text', chatTextArea.bindValue); 
     chatNode.setAttribute('status',"MyStatus"); 
     chatNode.setAttribute('timestamp',"2015-07-12 12:00:00 AM"); 

     chatArea.appendChild(chatNode); 
     chatTextArea.bindValue = ""; 
     setTimeout(function() { 
     $('#chatTextArea')[0].setAttribute('autofocus', true);//.focus(); 
     }, 1000); 
    } 

這裏是我使用它的HTML。

<section main layout vertical id="chat"> 
     <paper-material id="chatArea" elevation="1" animated style="overflow-y:scroll"> 
     </paper-material> 
     <span layout horizontal> 
     <paper-toolbar class="medium"> 
     <div> 
      <iron-autogrow-textarea label="Enter message here" autocomplete="true" autofocus="true" maxRows=5 name="Text Area" id="chatTextArea"> 
      <textarea id="chatText" max-rows="5" ></textarea> 
      </iron-autogrow-textarea> 
     </div> 
     <paper-icon-button raised icon="send" id="chatEnter"></paper-icon-button> 
     <iron-a11y-keys keys="ctrl+enter" on-keys-pressed="[[enterKeyHandler]]"></iron-a11y-keys> 
     </paper-toolbar> 
     </span> 
    </section> 
+0

你能提供更多的代碼嗎?你在使用jQuery嗎? –

+0

我正在使用Polymer和Jquery(不是很重)。這裏是代碼。 – IvoryHeart

回答

1

你並不需要把textarea標籤內iron-autogrow-textarea。鐵組件提供一個。然後您可以通過.textarea訪問該內部文本區域,並將焦點放在該文本區域上。

這是一個小的工作示例。

<body> 
    <iron-autogrow-textarea rows="5"></iron-autogrow-textarea> 
    <button>Focus!</button> 

    <script> 
     var button = document.querySelector('button'); 
     button.addEventListener("click", function(){ 
      console.log(document.querySelector('iron-autogrow-textarea')); 
      var area = document.querySelector('iron-autogrow-textarea'); 
      area.textarea.focus(); 
     }); 

    </script> 

</body> 
+0

我已經複製並粘貼了上面的代碼(並且一遍又一遍地播放了它的變體)。我唯一能夠獲得焦點或者選擇在「area.textarea」上工作的方法是如果在調用之前設置了一個值焦點。 即如果area.textarea.value =「東西」 我會生氣還是*其他人*有這個問題? – Sean

+0

我不會遇到這種行爲。你可以找到一個鏈接plunker [here](http://plnkr.co/edit/BFd7tcqdm2AtHI8Lv4V9?p=preview)。點擊按鈕將切換兩個文本區之間的焦點。 plunker只適用於Chrome,但如果我從我的服務器運行代碼,它也適用於Firefox。 – Maria

+0

感謝您的回覆。對我來說更具體一點,我實際上使用實現iron-autogrow-textarea的paper-textarea。當我使用您提供的確切代碼訪問paper-textarea中的iron-autogrow-textarea時,它似乎不起作用。使用相同的querySelector允許我改變佔位符文本,所以我知道它正確地選擇元素。 – Sean