2009-04-30 7 views
0

最初に、背景: 私はTapestry 4で作業しています。そのため、特定のページのHTMLは、アプリケーション全体に散らばっているさまざまなビットとHTMLからまとめられています。私が働いているコンポーネントについては、<body>タグがないので、onloadという属性を付けることはできません。どのようにHTMLのすべてを持たずにHTML入力要素にフォーカスを設定できますか?

コンポーネントには、ページの読み込み時にフォーカスが必要な入力要素があります。 bodyタグにアクセスすることなく、ページのロード時にファイル入力(またはその他のテキストタイプの入力)にフォーカスを設定する方法を知っている人はいますか?

私は(は、setFocusは、ファイルの入力要素にフォーカスを設定する機能です)
document.body.setAttribute('onload', 'setFocus()')
のように体内にスクリプトを挿入しようとしたが、それは動作しませんでした。私はそれに驚いたとは言えません。

EDIT:
述べたように、私は実際にページコンポーネントでこれを行う必要があります。私は、ページの最初の編集可能で目に見える入力に焦点を当てるために使用するスクリプトにファイルタイプの入力を追加しました。この問題を調査する際、私はこれを行う上でセキュリティ上の問題は見つけていません。

答えて

1

これは私のためによく働いています

<script> 
    function getLastFormElem(){ 
    var fID = document.forms.length -1; 
    var f = document.forms[fID]; 
    var eID = f.elements.length -1; 
    return f.elements[eID]; 
    } 
</script> 


<input name="whatever" id="maybesetmaybenot" type="text"/> 
<!-- any other code except more form tags --> 

<script>getLastFormElem().focus();</script> 
0

試しプレイtabstop属性を持つ

+0

kingoleg、あなたはtabindex属性(?)を意味すると思います。http://www.htmlcodetutorial.com/forms/%5FINPUT%5FTABINDEX.html –

1

を使用すると、ウィンドウに

window.onload = setFocus; 
1

をonloadイベントハンドラを与えることができ、私はあなたの基本的な問題があると思いますカプセル化。ほとんどの場合、イベントハンドラをonloadイベントにアタッチすることができますが、これを行う方法は、John Resigのhttp://ejohn.org/projects/flexible-javascript-events/を参照してください。ページ上に2つのコンポーネントを持つことができないため、setFocusを管理する必要があります。ページが読み込まれるときのフォーカス。

0

まず、入力ファイルは他の入力と同じではありません。セキュリティ上の理由から、これを念頭に置いておく必要があります。入力ファイルがフォーカスされると、読み込み専用にするか、ブラウザがポップアップしてファイルを選択する必要があります。

他の入力については、いくつかの要素でonloadイベントを試すこともできます(本体にonloadイベントがあるだけでなく)HTMLの途中でインラインJavaScriptを使用することもできます。 javascriptコードが関数であることを知らせずに置くと、ブラウザがそれを読み込んでいる間に実行されます。次のようなものがあります。

<script type="text/javascript"> 

function yourFunction() 
{ 
    ...; 
}; 

alert('hello world!"); 

yourFunction(); 

</script> 

この機能は、ブラウザが読み込んだ直後に警告が表示されます。

可能であれば、jQueryを使用してJavaScriptを実行する必要があります。それはあなたのライブsooooをはるかに簡単になります....:) jQuery

+0

ファイルの入力は読み取り専用にする必要がありますか?ユーザーがパスを入力する際のリスクは何ですか? – ntownsend

+0

実際には、作業している環境によって異なります。そのブラウザの制限。たとえば、mozillaの人たちは次のように言っています: http://www.mozilla.org/security/announce/2007/mfsa2007-32.html – Lucas

+0

入力ファイルには多くの制限があります。 – Lucas

0

は、次のように行うことができる:CodeProjectの上Set Focus to First Input on Web Pageを参照してくださいJavaScriptの無地で、より精巧な解決策について

var oldWindowOnload = window.onload; // be nice with other uses of onload 
window.onload = function() { 
    var form = document.forms[0]; 
    for(i=0; i < form.length; i++) { 
     if (form[i].type == "file") { 
      form[i].focus(); 
     } 
    } 
    oldWindowOnload(); 
} 

:平野JavaScriptを使用して

$(function() { 
    $("input:file").eq(0).focus() 
}) 

は、次のように行うことができます。

0

Scunliffeのソリューションには使い勝手の面で利点があります。

ページスクリプトの読み込みが遅い場合、onLoadイベントからfocus()を呼び出すと、ユーザーがページをスクロールすると非常に厄介なページが「ジャンプ」します。これは、よりユーザーフレンドリーなアプローチである:

<input id="..."></input> 
... really small piece of HTML ... 
<script>getTheDesiredInput().focus();</script> 
3
<script> 
window.onload = function() { 
    document.getElementById('search_query').select(); 
    //document.getElementById('search_query').value = ''; 
    // where 'search_query' will be the id of the input element 
}; 
</script> 

は、私が考えるに有用である必要があります!

関連する問題