Javascript 如何选择第一个子表单元素(使用原型)?
我想使用Prototype提供给我的东西或纯javascript将焦点设置在div中的第一个表单元素上。我有一个对包含表单元素的div的引用。我不知道第一个表单元素是Javascript 如何选择第一个子表单元素(使用原型)?,javascript,prototypejs,Javascript,Prototypejs,我想使用Prototype提供给我的东西或纯javascript将焦点设置在div中的第一个表单元素上。我有一个对包含表单元素的div的引用。我不知道第一个表单元素是、还是节点 我想这样做: $('parentDiv').down('textarea, select, input').focus(); 然而,该方法似乎选择了第一个textarea节点,即使在textarea之前有一个输入节点 有没有优雅的方法?我想我可以得到父div的所有子代,然后在每个子代上迭代寻找这些节点中的一个,但我怀疑
、
还是
节点
我想这样做:
$('parentDiv').down('textarea, select, input').focus();
然而,该方法似乎选择了第一个textarea节点,即使在textarea之前有一个输入节点
有没有优雅的方法?我想我可以得到父div的所有子代,然后在每个子代上迭代寻找这些节点中的一个,但我怀疑在原型中可能有一种很酷的方法来实现这一点
我不能使用表单对象的方法,因为这个父div只是表单的一部分。它是通过AJAX调用添加到页面中的,因此当div被添加到DOM中时,我希望将焦点设置在新添加的集合中的第一个字段上(这很可能不是整个表单中的第一个字段)
谢谢 当我使用prototype时,我肯定我做过类似的事情
var firstElement = Form.findFirstElement(document.forms[0]);
if(firstElement !=null)
firstElement.activate();
我将用您的表格替换文档。表格[0]
Prototype在表单
类上也有focusFirstElement
的方法,但我不能使用它,因为我要加载的一些页面没有表单。您可能只需要调用Form.focusFirstElement($(Form))代码>或类似的变体
编辑:
我认为您可以在不同类型的元素上使用表单扩展,但它似乎不起作用,但是您可以从表单中获取一些内容并直接应用它。下面的代码应该按照您的意愿工作
var firstElement = Form.getElements($("parentDiv")).find(function(element) {
return element.type != 'hidden' && !element.disabled &&
['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
});
if(firstElement != null)
firstElement.activate();
Had与pkeading完全相同的问题-可以证实Quintin Robinson编辑的答案符合pkeading的要求
2注:
$(“parentDiv”)
需要引用包含表单元素的div
如果使用scriptaculous effects打开带有“子窗体”的div,则需要在效果中的afterFinish函数中运行代码:
Effect.BlindDown(*YourDiv*,{
duration:0.5,
afterFinish: function() {
var ff1=Form.getElements($(*YourDiv*)).find(
function(element){
return element.type != 'hidden' && !element.disabled && ['input', 'select', 'textarea'].include(element.tagName.toLowerCase())
}
);
if(ff1 != null) ff1.activate();
}
});
这种方法的问题是我不想将焦点设置在表单中的第一个字段上,而是设置在表单中div中的第一个字段上。我在问题中补充了这一点的澄清。