Javascript jQuery支持";:“无效”;选择器
我收到以下控制台消息:Javascript jQuery支持";:“无效”;选择器,javascript,jquery,html,jquery-selectors,Javascript,Jquery,Html,Jquery Selectors,我收到以下控制台消息: [16:04:01.292] Error: Syntax error, unrecognized expression: unsupported pseudo: invalid @ http://localhost:8080/assets/js/jquery-1.9.1.min.js:4 当我尝试类似于: if($(e.target).is(':invalid'){…} 我该如何解决这个问题 这里有一个例子:-尝试使用@JanDvorak建议的querySelector
[16:04:01.292] Error: Syntax error, unrecognized expression: unsupported pseudo: invalid @ http://localhost:8080/assets/js/jquery-1.9.1.min.js:4
当我尝试类似于:
if($(e.target).is(':invalid'){…}
我该如何解决这个问题
这里有一个例子:-尝试使用@JanDvorak建议的
querySelectorAll
更改jQuery版本(1.9后停止工作)(考虑到这一点,他的答案应该被接受),您可以编写自己的表达式,使成为(':invalid')
有效吗
jQuery.extend(jQuery.expr[':'], {
invalid : function(elem, index, match){
var invalids = document.querySelectorAll(':invalid'),
result = false,
len = invalids.length;
if (len) {
for (var i=0; i<len; i++) {
if (elem === invalids[i]) {
result = true;
break;
}
}
}
return result;
}
});
:无效的
实际上不是有效的jQuery选择器(伪类)
然而,根据,它是一个有效的CSS选择器(IE中不支持),您可以使用元素的
validity
属性(请参阅)
现在结合@adeneo的想法:
jQuery.extend(jQuery.expr[':'], {
invalid : function(elem, index, match){
return elem.validity !== undefined && elem.validity.valid === false;
},
valid : function(elem, index, match){
return elem.validity !== undefined && elem.validity.valid === true;
}
});
jquery 1.8之后不支持自定义验证器这可能会有所帮助,因为它是CSS而不是javascript,jquery会将一些CSS伪选择器重新创建为表达式,以方便您使用。这不是这些选择器中的一个,也许您需要通过
querySelectorAll
使用它,因为它是CSS选择器,而不是jquery选择器。这是定义的ely是一个1.9版本的问题。如果你用不同的jQuery版本测试它,它将停止使用1.9。我不确定这是否明显。对不起,我花了一段时间写我的答案。你的答案更好。向上投票。不在IE文档中工作。querySelectorAll(':invalid')
给了我“语法错误”在IE9下,即使我使用了X-UA-Compatible IE=Edge
-有什么建议吗?IE9根本不支持HTML5表单验证,因此:无效的选择器不起作用->+1,我不确定是否要发布答案,因为这应该是给你的。我从未想到本机查询选择器会起作用。@adeneo是你写的fiddleYeah,但那大部分是从MDN复制/粘贴的。在这里,创意人有空间!@adeneo你还展示了如何使用自定义伪类扩展jQuery我已经证实了上述内容,但令人惊讶的是,这是有效的:$(':invaild')
--打印所有无效元素。
if($(e.target).is(":invalid")) //SyntaxError
if(~[].indexOf.call(document.querySelectorAll(":invalid"),e.target))
if(e.target.matches(":invalid"))
jQuery.extend(jQuery.expr[':'], {
invalid : function(elem, index, match){
return elem.validity !== undefined && elem.validity.valid === false;
},
valid : function(elem, index, match){
return elem.validity !== undefined && elem.validity.valid === true;
}
});