2011-01-19 8 views
0

これは異常ですが、「@」記号を入力したときにのみ関与するようにカスタマイズしたオートコンプリートコードがあります... FireFoxではうまく機能します。私は「@」と入力し、ドロップダウンが表示されます。ChromeとjQueryの問題

ただし、Chromeで試してみると、プルダウンには2つの「@@」が必要です。

これは何ですか?ここで

は、オートコンプリートのドロップダウンをアクティブにswitch文のコードです:

  case KEY.ATSIGN: 
      clearTimeout(timeout); 
      timeout = setTimeout(onChange, options.delay); 
      //alert("hi"); 
      //select.show(); 
      break; 
     default: 

      break; 

もう一つの奇妙な行動は、私は1を入力すると、広告の警告なステートメントは、それが実際に動作するときことを「@」Chromeで..ですどのようにこれを修正するための任意のアイデア?ありがとう! EDIT

は、ここでは、表示または@を提出しないようにアイテムがドロップダウンから選択されたとき、私は「」空白に@記号を置き換えていますのonChange機能です

function onChange(crap, skipPrevCheck) { 
    if(lastKeyPressCode == KEY.DEL) { 
     select.hide(); 
     return; 
    } 

    var currentValue = $input.val(); 

    if (!skipPrevCheck && currentValue == previousValue) 
     return; 

    previousValue = currentValue; 

    currentValue = lastWord(currentValue); 
    if (currentValue.length >= options.minChars) { 
     $input.addClass(options.loadingClass); 
     if (!options.matchCase) 
      currentValue = currentValue.toLowerCase(); 
      currentValue = currentValue.replace("@",""); 
      request(currentValue, receiveData, hideResultsNow); 
      //alert(currentValue); 
    } else { 
     stopLoading(); 
     select.hide(); 
    } 
}; 

NEW EDITあなたが見ることができる でサインASCII値が50

var KEY = { 
    UP: 38, 
    DOWN: 40, 
    DEL: 46, 
    TAB: 9, 
    RETURN: 13, 
    ESC: 27, 
    COMMA: 188, 
    PAGEUP: 33, 
    PAGEDOWN: 34, 
    BACKSPACE: 8, 
    ATSIGN: 50 
}; 

として、ここで設定されているそして、switch文で、オートコンプリートのみアクティブになります@記号が押されている:

 switch(event.keyCode) { 

     case KEY.UP: 
      event.preventDefault(); 
      if (select.visible()) { 
       select.prev(); 
      } else { 
       onChange(0, true); 
      } 
      break; 

     case KEY.DOWN: 
      event.preventDefault(); 
      if (select.visible()) { 
       select.next(); 
      } else { 
       onChange(0, true); 
      } 
      break; 

     case KEY.PAGEUP: 
      event.preventDefault(); 
      if (select.visible()) { 
       select.pageUp(); 
      } else { 
       onChange(0, true); 
      } 
      break; 

     case KEY.PAGEDOWN: 
      event.preventDefault(); 
      if (select.visible()) { 
       select.pageDown(); 
      } else { 
       onChange(0, true); 
      } 
      break; 

     // matches also semicolon 
     case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA: 
     case KEY.TAB: 
     case KEY.RETURN: 
      if(selectCurrent()) { 
       // stop default to prevent a form submit, Opera needs special handling 
       event.preventDefault(); 
       blockSubmit = true; 
       return false; 
      } 
      break; 

     case KEY.ESC: 
      select.hide(); 
      break; 
     case KEY.ATSIGN: 
      clearTimeout(timeout); 
      timeout = setTimeout(onChange, options.delay); 
      //alert("hi"); 
      //select.show(); 
      break; 
     default: 

      break; 
    } 

をそしてここで私が述べたように、@を

function onChange(crap, skipPrevCheck) { 
    if(lastKeyPressCode == KEY.DEL) { 
     select.hide(); 
     return; 
    } 

    var currentValue = $input.val(); 

    if (!skipPrevCheck && currentValue == previousValue) 
     return; 

    previousValue = currentValue; 
    //alert(previousValue); 
    currentValue = lastWord(currentValue); 
    if (currentValue.length >= options.minChars) { 
     $input.addClass(options.loadingClass); 
     if (!options.matchCase) 
      currentValue = currentValue.toLowerCase(); 
      currentValue = currentValue.replace("@",""); 
      //alert(currentValue); 
      request(currentValue, receiveData, hideResultsNow); 

    } else { 
     stopLoading(); 
     select.hide(); 
    } 
}; 

を押された後、case文で呼び出される関数のonChangeである、これは私が... FFで素晴らしい作品プレス一度@とオートコンプリートがChromeで...しかし活性化し、私は(2回記号で)@@押す必要があります....また、ここで

は、コードのビットは

// only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all 
$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) { 
    // a keypress means the input has focus 
    // avoids issue where input had focus before the autocomplete was applied 
    hasFocus = 1; 
    // track last key pressed 
    lastKeyPressCode = event.keyCode; 
右switch文の前にあります
+0

のようなもので、簡単な例をモックアップすることがありますか? onkeyup? – Gidon

+0

私はあなたが正常に問題に関連性のない2つのコードを見せてくれたと思います。 :) – galambalazs

+0

アクティベータは、@記号を押したときです。Ascii 50. –

答えて

0

質問の3番目のコメントを見てください。

jQuery Event Keypress: Which key was pressed?

あなたは、キー入力の代わりに使ってみてからkeyupとあなたが得るどのくらい見たいかもしれません。また、問題を投稿している場合は、関係のないコードをすべて削除し、問題を最小限に抑えることが最善です。

あなたもイベントが結合された「活性化剤」であるためにhttp://jsbin.com/

+0

あなたはこの質問の複製を投稿して、あなたが答えを見つけたことを確認しました - あなたはこの質問に対して同じことをしていたはずです - またはそれが閉鎖されるように頼んだ... – calumbrodie