0

首先,背景:我正在使用 Tapestry 4,因此任何给定页面的 HTML 都是由分散在整个应用程序中的各种 HTML 片段拼接在一起的。对于我正在处理的组件,我没有<body>标签,所以我不能给它一个onload属性。

该组件有一个在页面加载时需要焦点的输入元素。有谁知道在页面加载时将焦点设置为文件输入(或任何其他文本类型输入)而不访问正文标记的方法?

我尝试将脚本插入到正文
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 处理程序

window.onload = setFocus;
于 2009-04-30T20:45:34.603 回答
1

我认为您的封装存在根本问题。尽管在大多数情况下,您可以将事件处理程序附加到 onload 事件 - 请参阅John Resig 的http://ejohn.org/projects/flexible-javascript-events/了解如何执行此操作,但 setFocus 需要由页面组件管理因为您的页面上不能有两个组件要求它们在页面加载时获得焦点。

于 2009-04-30T20:49:51.363 回答
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上将焦点设置为网页上的第一个输入。

于 2009-05-04T18:33:43.873 回答
0

Scunliffe 的解决方案具有可用性优势。

当页面脚本加载缓慢时,如果用户滚动页面,则从“onLoad”事件调用 focus() 会使一个非常讨厌的页面“跳转”。所以这是一种更加用户友好的方法:

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