我继承了公司网站,并随着它急忙抛出CMS。今天得到了我的第一个错误,我很难过。
CMS使用markItUp !,我以前从未听说过。问题是:只要有人在受影响的textarea中键入 CTRL 字符,jQuery就会抛出一个可爱的Syntax error, unrecognized expression: [ctrl character]
异常。
我正在看markItUp! keyPressed函数,我不知道在这种情况下它将如何曾工作。要使用快捷方式,必须在前面加上 CTRL ,但按下 CTRL 后,keyPressed将始终激活,而不是在集合中找到 CTRL ,因此Sizzle.filter
中的错误。
按下 CTRL 并将textarea置于焦点,然后:
//jquery.markitup.js
function keyPressed(e) {
shiftKey = e.shiftKey;
altKey = e.altKey;
ctrlKey = (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false;
if (e.type === 'keydown') {
if (ctrlKey === true) {
//Line below attempts to find an anchor tag with accesskey CTRL character
li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li');
//SNIP
}
}
}
//jquery-1.5.js
Sizzle.filter = function( expr, set, inplace, not ) {
var count = 0;
var match, anyFound,
old = expr,
result = [],
curLoop = set,
isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
//expr = the CTRL character, set = the markItUp! default set
while ( expr && set.length) {
for ( var type in Expr.filter ) {
if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
//SNIP
}
}
// Improper expression
if ( expr === old ) {
if ( anyFound == null ) {
Sizzle.error( expr );
} else {
break;
}
}
old = expr;
}
return curLoop;
};
Sizzle.error = function( msg ) {
throw "Syntax error, unrecognized expression: " + msg;
};
我在这里缺少什么?
答案 0 :(得分:1)
对我来说,它只发生在新版本的jQuery(1.7.1)中。如果我使用1.4.2,它不会报告任何错误。无论我使用哪种浏览器。
答案 1 :(得分:0)
此问题已通过此commit中的jquery 1.5兼容性修补程序修复。
补丁中的相关行是:
- li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li');
+ li = $('a[accesskey="'+String.fromCharCode(e.keyCode)+'"]', header).parent('li');