如果用户使用键盘可以写入给定的输入元素,我需要使用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');
还不足以检查它们。
答案 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()
}