jQuery和Chrome ......需要另外一组眼球

时间:2011-01-19 09:58:49

标签: jquery google-chrome

这很奇怪,但我有一些自动完成代码,我只是在你输入“@”符号时自定义...在FireFox中它运行得很好。我键入一个'@',然后出现下拉列表。

但是......当我在Chrome中试用它时,它需要两个'@@'来进行下拉菜单。

这可能是什么?

另一个奇怪的行为是,当广告提示时,它实际上会在我在Chrome中输入一个“@”时有效...有关如何解决此问题的任何想法?谢谢!

这是onChange函数,我用@“替换@符号,因此当从下拉列表中选择一个项目时,它不显示或提交@

您可以看到@ ascii值在此处设置为50(ATSIGN变量)

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

这是切换语句之前的一些代码

    // 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语句中,只有在按下@符号时才会激活自动完成功能:

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

这是在按下@后在case语句中调用的函数onChange

    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();
    }
};

正如我所提到的,这在FF中效果很好...我按@一次,自动完成激活...但是在Chrome中,我必须按@@(在符号两次)....

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我想出来了......我需要创建一个新的延迟变量,并使自动完成下拉列表比标准时间晚400秒发生

所以我添加了变量delayLong并将其设置为500毫秒,现在它在Chrome中完美运行。去图。