我正在使用以下代码来检查是否选择了输入字段,但我不知道问题出在哪里,因为它不起作用!
<html>
<head>
<title>Test </title>
<head>
<body>
<form >
<input type="text" id="select" value="select"/>
</form>
<script type="text/javascript" >
var d, len,i, j, el;
d=document.forms;
len=d.length;
for(i=0; i<len; i++){
el=d[i].elements;
for(j=0;j<el.length; j++)
if(el[j].type == "text" && el[j].focus())
{
alert("you selected an input field with type text");
}
}
</script>
</body>
</html>
任何帮助将不胜感激!谢谢!
答案 0 :(得分:0)
我接受了以下部分代码:
df=document.forms;
len=d.length;
for(i=0; i<len; i++)
els=d[i].elements;
关于这四行的几点说明:
df
现在包含表单列表,确定d
来自何处?
d
未初始化,则不会指向任何内容,并且不包含任何内容您确定必须使用d
和df
吗?而且不只是df
无处不在吗?
稍后同样的事情,在你的第二个for()
循环中:你正在使用一个名为el
的变量,但你在哪里初始化该变量?
我看到的是:
els=d[i].elements;
for(j=0;j<el.length; j++)
因此,您将元素放在名为els
的变量中;然后,您尝试从名为el
...
基本上:在从变量中读取之前,您应该确保它包含某些内容; - )
并且,为了帮助您,您应该安装调试扩展程序,例如Firebug for Firefox (或使用Chrome提供的控制台):它经常会提供有趣的错误消息,如下所示:< / p>
http://extern.pascal-martin.fr/so/so-6801104.png
编辑
我会说,下一步是在需要的地方添加{}
。
如果你没有将{}
放在for()
之后,那么循环中只会执行一条指令。
简而言之,如果你有这个:
for (i=0 ; i<10 ; i++)
console.log('hello');
console.log('world');
然后hello
将显示10次;但world
只会显示一个。
如果您希望两个console.log调用位于for
循环中,则必须使用括号:
for (i=0 ; i<10 ; i++) {
console.log('hello');
console.log('world');
}
因此,即使您没有语法错误,现在,您的代码可能不会像您认为的那样循环。
最后,如果你想找出哪个元素有焦点,你应该看一下document.activeElement
属性(引用):
返回当前聚焦的元素,即将要的元素 如果用户输入任何键击事件,则获取击键事件。
它似乎还不是标准,因为它是HTML-5规范的一部分,但它似乎得到了几个浏览器的支持:
最初作为Internet中的专有DOM扩展引入 Explorer 4,Opera和Safari也支持此属性(截至 版本4)。
答案 1 :(得分:0)
此脚本在加载后立即运行,您需要使用事件处理程序。
window.onload=function(){
var els=document.getElementsByTagName('input');
//Gets all the input elements
for(var i=0;i<els.length;i++){
//Attach an event handler that gets called when the element has focus
els[i].onfocus=checkElem;
}
//for your example you could do this all in one line since you only have one element.
//document.getElementById('select').onfocus=checkElem;
}
var checkElem(){
//Check to see if the input element that registered the event is text or not
if(this.type=='text'){
alert('You have selected a text input');
}
else{
alert('You have selected a non-text input');
}
}
这是一个天真的实现。我不确定你想要完成什么。通常最好在表单元素上实现某种事件委托。搜索事件委托,您将找到许多资源。