代码之家  ›  专栏  ›  技术社区  ›  karim79

我如何防止jQuery自动补全器上的后续绑定被触发?

  •  1
  • karim79  · 技术社区  · 16 年前

    autocomplete #search #searchButton

    1. 用户键入内容,例如。
    2. 用鼠标或键盘提出建议,
    3. 输入或点击 #搜索按钮 #搜索 #搜索按钮 的点击事件,或者直接触发(即实际点击),从而触发正常搜索。

    在firefox中,当对建议按下Enter键时,结果处理程序和按键事件都会触发,为用户提供脸框弹出窗口,并执行完整搜索。我想,不知怎么的,它停了下来 .keypress result stopPropogation() stopImmediatePropogation()

    如果有人有任何想法,或者想帮助我度过难关,我将不胜感激。

    提前感谢!

        jQuery("#search").autocomplete("/index/suggest", {
            selectFirst: false,
            formatItem: function(data, i, n, value) {
                return "<font color='#3399CC'>" + value.split("::")[0] + "</font>";
            },
            formatResult: function(data,value) {
                return value.split("::")[0];
            }
        }).result(function(event, data, formatted) {
            alert('Hello, someone selected a suggestion by clicking on it or pressing enter on it, so you\'re getting this!');
            var pieces = formatted.split("::");
            var url = '/' + pieces[1] + '/detail/?id=' + pieces[2];
            jQuery.facebox({ ajax: url });
        }).keypress(keypressHandler).blur(function() {
            alert('I don\'t want this to appear if .result above is called, and it doesnt, except in firefox! Bah!');
            jQuery(this).flushCache();
        });
    
        function keypressHandler(e)
        {
            if(e.which == 13) {
                if(!jQuery('#searchButton').is(':disabled')) {
                    jQuery(this).blur();
                    jQuery('#searchButton').focus().click();
                }
            }
        }
    
    2 回复  |  直到 16 年前
        1
  •  3
  •   tvanfosson    16 年前

    jQuery("#search").autocomplete("/index/suggest", {
        selectFirst: false,
        formatItem: function(data, i, n, value) {
            return "<font color='#3399CC'>" + value.split("::")[0] + "</font>";
        },
        formatResult: function(data,value) {
            return value.split("::")[0];
        }
    }).result(function(event, data, formatted) {
        alert('Hello, someone selected a suggestion by clicking on it or pressing enter on it, so you\'re getting this!');
        var pieces = formatted.split("::");
        var url = '/' + pieces[1] + '/detail/?id=' + pieces[2];
        jQuery.facebox({ ajax: url });
    });
    
    jQuery("#search").unbind("keypress").keypress(keypressHandler).blur(function() {
        alert('I don\'t want this to appear if .result above is called, and it doesnt, except in firefox! Bah!');
        jQuery(this).flushCache();
    });
    

    也可能是在自动补全处理程序中处理了其他关键事件。我认为你会想把它们从文本输入中删除,同时把它们留在自动补全“列表”中。如果自动补全处理的事件与按键不同,您可能需要将其删除。

        2
  •  -1
  •   Soviut    16 年前

    在javascript中,你可以简单地:

    return false;
    

    在您的事件处理函数上,以阻止事件进一步冒泡。