0

まず、背景について説明します。私は Tapestry 4 で作業しているため、特定のページの HTML は、アプリケーション全体に散在するさまざまな HTML の断片からつなぎ合わされています。私が取り組んでいるコンポーネントには<body>タグがないため、onload属性を指定できません。

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

スクリプトを本体に挿入しようとしましたが
document.body.setAttribute('onload', 'setFocus()')
( setFocus はファイル入力要素にフォーカスを設定する関数です)、うまくいきませんでした。とは言っても、私はそれに驚いたわけではありません。

編集:
述べたように、私は実際にページ コンポーネントでこれを行う必要があります。最終的に、ページ上の最初の編集可能で表示可能な入力にフォーカスを与えるために使用するスクリプトに、ファイル タイプの入力を追加することになりました。この問題を調査したところ、これを行ってもセキュリティ上の問題は見つかりませんでした。

4

8 に答える 8

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>

役に立つに違いないと思います!!!

于 2011-04-08T10:52:44.720 に答える
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>
于 2009-04-30T20:41:33.083 に答える
1

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

于 2009-04-30T20:49:51.363 に答える
1

ウィンドウに onload ハンドラを与えることができます

window.onload = setFocus;
于 2009-04-30T20:45:34.603 に答える
0

Scunliffeのソリューションには、使いやすさの利点があります。

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

<input id="..."></input>
... really small piece of HTML ...
<script>getTheDesiredInput().focus();</script>
于 2009-05-05T13:23:56.603 に答える
0

tabstop属性で遊んでみる

于 2009-04-30T20:38:27.977 に答える
0

まず第一に、入力ファイルは他の入力と同じではありません。これを覚えておく必要があります....これはセキュリティ上の理由からです。入力ファイルがフォーカスを取得すると、読み取り専用にするか、ブラウザがダイアログをポップアップしてファイルを選択する必要があります。

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

<script type="text/javascript">

function yourFunction()
{
   ...;
};

alert('hello world!");

yourFunction();

</script>

関数は、ブラウザがアラートを読み取ったときにアラートの後に実行されます。

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

于 2009-04-30T20:53:41.620 に答える
0

jQueryを使用すると、次のように実行できます。

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

プレーンな 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 を使用したより複雑なソリューションについては、CodeProjectの Web ページの最初の入力にフォーカスを設定するを参照してください。

于 2009-05-04T18:33:43.873 に答える