Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查输入是否为“类型”;文本/号码/电子邮件/等“;?_Javascript_Html - Fatal编程技术网

Javascript 检查输入是否为“类型”;文本/号码/电子邮件/等“;?

Javascript 检查输入是否为“类型”;文本/号码/电子邮件/等“;?,javascript,html,Javascript,Html,我需要使用Javascript(而不是jQuery)检查给定的输入元素是否可由用户使用键盘写入 我想排除复选框、收音机、按钮、重置、提交、图像等 有没有一种不列出所有输入类型的简单方法 这是我现在的代码: if (element.getAttribute === undefined) { return false; } var eTag = element.tagName; var eType = element.getAttribute('type'); var isTextInp

我需要使用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')不足以全部检查。

我认为您需要自己编写一些东西。您要求的是比您想象的更具体的业务逻辑

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

  • 键盘至少可以输入一些时间
  • 文本必须显示在屏幕上,除非是密码
  • 应该接受更多的输入,而不仅仅是单选按钮或复选框中的“空格”或“回车”
这不是一个标准的HTML修饰符,或者标准的jQuery,或者其他任何东西。这是您自己的业务逻辑


我知道这不是一个答案,但我认为有很好的理由相信你不会从盒子里的某个地方找到你想要的东西。这取决于您自己应用程序的逻辑,确切地说是“文本”的意思。

将此作为答案发布,因为它解决了问题,但严格来说,这不是我想要的

我还在等待一个更干净的解决方案

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;

如果要根据输入类型调用函数,请使用所需的输入类型创建一个数组,使用types函数创建另一个数组,然后执行循环

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()
}
函数GetInputType(e){//e=element
变量类型=[
“文本”,
“密码”
],
Attr=e.getAttribute(“类型”),
行动=[
函数(){alert(“它是文本”)},
函数(){alert(“它是密码”)}
],
Call=function(){alert(“未知类型”)};

对于(var i=0,l=Types.length;这似乎是jquery答案@djechlin no,您只需测试元素是否为输入(第二个示例测试元素是否为
type=text
)的输入。如果输入类型为
number
,则返回
false
,问题是“text”太窄且“input”太宽了?我想知道为什么所有这些否决票…这是一个合理的问题。实际上,我只需要知道输入是否显示了一个用户可以插入字符的字段…@FezVrasta
date
count?我不这么认为,date在不受支持的浏览器上是一个文本输入,在受支持的浏览器上仍然有一个文本输入+widget@FezVrasta你的意思是它确实有用吗?因为无论哪种方式都有文本输入,我的意思是,它是可写的。这是迄今为止我所见过的解决这个问题的最完整的代码。
元素。contentEditable
似乎不是正确的调用方式。相反,它应该是
元素。isContentEditable