检查输入是否为" text / number / email / etc"?

时间:2015-11-25 17:41:49

标签: javascript html

如果用户使用键盘可以写入给定的输入元素,我需要使用Javascript(而不是jQuery)进行检查。

我想排除复选框,收音机,按钮,重置,提交,图片等。

有没有一种简单的方法可以不列出所有输入类型?

这是我现在的代码:

if (element.getAttribute === undefined) {
    return false;
}

var eTag  = element.tagName;
var eType = element.getAttribute('type');
var isTextInput = (eTag === 'INPUT' || eTag === 'TEXTAREA') && ( eType !== null || eType === 'text' || eType === 'password');
var isEnabledInput = element.disabled === false && element.readOnly === false;
var isContentEditable = ( element.contentEditable && element.contentEditable === true );

// stop for enabled text inputs, selects and contentEditable areas
return (isTextInput && isEnabledInput) || eType === 'SELECT' || isContentEditable;

从逻辑上讲,&& ( eType !== null || eType === 'text' || eType === 'password');还不足以检查它们。

3 个答案:

答案 0 :(得分:0)

认为你需要自己写点东西。您需要的是比您想象的更具体的业务逻辑。

  • text是文字。
  • number是文本,但输入必须是0-9和十进制。
  • password是屏幕上显示的文字输入,黑色圆圈或类似内容。
  • 单选按钮当然是键盘可输入的。文本不会显示,但password也是如此。此外,输入基本上是“是”或“否”,但这只是对键盘输入的限制,就像number是对键盘输入的限制一样。

所以你想要像...这样的东西。

  • 键盘至少可以在某些时间输入...
  • 并且文字必须显示在屏幕上,除非它是密码......
  • 应该接受更多输入,而不仅仅是“空格”或“输入”,如单选按钮或复选框

这不是标准的HTML修饰符,或标准的jQuery,或任何东西。这是您自己的业务逻辑。

我知道这不是一个答案,但我认为有充分的理由相信你找不到你想要的开箱即用的东西。这取决于你自己的应用程序的逻辑,正是你所说的“文本”。

答案 1 :(得分:0)

将此作为答案发布是因为解决了问题,但并不是我要求的严格要求。

我还在等待更清洁的解决方案。

var notTextual = [
    'button',
    'checkbox',
    'hidden',
    'image',
    'radio',
    'reset',
    'submit'
];

if (element.getAttribute === undefined) {
    return false;
}

var eTag  = element.tagName;
var eType = element.getAttribute('type');
var isTextInput = (eTag === 'INPUT' || eTag === 'TEXTAREA') && !notTextual.contains(eType);
var isEnabledInput = element.disabled === false && element.readOnly === false;
var isContentEditable = ( element.contentEditable && element.contentEditable === true );

// stop for enabled text inputs, selects and contentEditable areas
return (isTextInput && isEnabledInput) || eType === 'SELECT' || isContentEditable;

答案 2 :(得分:0)

如果你想根据输入类型调用一个函数,可以创建一个包含所需输入类型的数组,另一个使用类型函数创建一个循环。

function GetInputType(e){ // e = element
   var Types=[
      "text",
      "password"
   ],
   Attr=e.getAttribute("type"),
   Actions=[
      function(){alert("It's text.")},
      function(){alert("It's password.")}
   ],
   Call=function(){alert("Unknown type.")};
   for(var i=0,l=Types.length;i<l;i++){
      !function(i){
         if(Attr==Types[i])
            Call=Actions[i];
         else break
      }(i)
   }
   Call()
}