检查是否选择了具有特定类型的输入

时间:2011-07-23 14:44:34

标签: javascript

我正在使用以下代码来检查是否选择了输入字段,但我不知道问题出在哪里,因为它不起作用!

   <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>

任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:0)

我接受了以下部分代码:

df=document.forms;
len=d.length;
for(i=0; i<len; i++)
els=d[i].elements;

关于这四行的几点说明:

  • 第一行:df现在包含表单列表,确定
  • 第二行:但d来自何处?
    • 看起来它没有初始化,因此不包含太多......
    • ...所以我认为你不能得到它的长度
  • 第四行:同样的事情
    • 如果d未初始化,则不会指向任何内容,并且不包含任何内容

您确定必须使用ddf吗?而且不只是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



OP编辑问题后

编辑

我会说,下一步是在需要的地方添加{}

如果你没有将{}放在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');
  }
}

这是一个天真的实现。我不确定你想要完成什么。通常最好在表单元素上实现某种事件委托。搜索事件委托,您将找到许多资源。