2011-08-29 25 views
2

我已经继承了公司网站,并且随着它一起匆匆抛出CMS。今天得到了我的第一个bug,我很难过。jQuery和/或markItUp!在CTRL键上ch咽

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

这听起来像你的选择表达有语法错误 - 尝试检查,这个选择是创建字符串:'$(“一[快速=” +字符串.fromCharCode(e.keyCode)+“]”,header)' – Tejs

+0

我同意这一观察。但是,如果是这样的话,为什么它对其他人都有效?我没有写这行 - 它是markItUp代码库的一部分。 –

+0

浏览器的区别?是否在不同的浏览器版本上报告错误,而不是您正在测试的错误?你能重现错误吗? – Tejs

回答

1

对我来说,它只发生在新版本的jQuery(1.7.1)。如果我使用1.4.2,它不会报告任何错误。不管我使用哪个浏览器。

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'); 
相关问题