2011-08-29 50 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'); 
相關問題