2

私は会社のウェブサイトを継承し、それに伴い急いでまとめた CMS を作成しました。今日初めてバグを見つけて困っています。

CMS は、今まで聞いたことのない markItUp! を使用しています。問題は次のとおりです。影響を受けるテキストエリアに誰かがCTRL文字を入力するたびに、jQuery は適切なSyntax error, unrecognized expression: [ctrl character]例外をスローします。

私はmarkItUpを見ています!keyPressed 関数と、状況下でどのように機能するかわかりませんショートカットを使用するには、それらの前に を付ける必要がありますCTRLが、 keyPressed は を押した後に常に起動し、セットにCTRL見つからないためCTRL、エラーになりますSizzle.filter

CTRLテキストエリアにフォーカスを合わせて押すと、次のようになります。

//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;
    };

ここで何が欠けていますか?

4

2 に答える 2

1

私にとっては、新しいバージョンの jQuery (1.7.1) でのみ発生します。1.4.2 を使用すると、エラーは報告されません。どのブラウザを使用しても。

于 2012-03-01T15:08:18.587 に答える
0

この問題は、このコミットの jquery 1.5 互換性パッチで修正されています。

パッチの関連する行は次のとおりです。

-            li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li');
+            li = $('a[accesskey="'+String.fromCharCode(e.keyCode)+'"]', header).parent('li');
于 2013-03-29T18:22:30.107 に答える