jQuery插件中未触发的事件

jQuery插件中未触发的事件,jquery,jquery-plugins,Jquery,Jquery Plugins,我有一个带有下拉建议框的文本字段。我为textfield创建了一个插件来显示搜索建议。但是keyup和blur事件没有触发 (function($){ $.fn.suggestions = function(input, suggestbox, options){ alert("page loaded"); alert(this.css("visibility")); this.keyup(function(event){

我有一个带有下拉建议框的文本字段。我为textfield创建了一个插件来显示搜索建议。但是keyup和blur事件没有触发

    (function($){
    $.fn.suggestions = function(input, suggestbox, options){
        alert("page loaded");
        alert(this.css("visibility"));
        this.keyup(function(event){
                alert(this.val());
                if(this.val() != ""){
                    $(suggestbox).css("visibility", "visible");
                    alert($(suggestbox).css("visibility"));
                    $(suggestbox).hide();
                    $(suggestbox).fadeIn("fast");
                    var query = this.val();
                    $(suggestbox).empty();
                    $(suggestbox).append("<ul>").css({
                                'list-style-type': 'none',
                                'cursor': 'pointer'
                            });
                    input(query, function(companies){
                        $.each(companies, function(index, value){
                            $(suggestbox).append("<li>" + value + "</li>").children("li").mouseover(function(event){
                                $(this).removeClass(options.mouseoutcss);
                                $(this).addClass(options.mouseincss);
                            }).mouseout(function(){
                                $(this).removeClass(options.mouseincss);
                                $(this).addClass(options.mouseoutcss);
                            }).click(function(){
                                        this.val($(this).text());
                                        $(suggestbox).hide();
                                    });
                        });
                    });
                    $(suggestbox).append("</ul>");
                }else{
                    $(suggestbox).fadeOut("fast", function(){
                        $(suggestbox).css("visibility", "hidden");
                    });
                }
            });

            this.blur(function(){
                setTimeout(function(){
                    if($(suggestbox).css("visibility") == "visible"){
                        $(suggestbox).hide();
                    }
                }, 200);
            });

    };

}) (jQuery);
原因 this.val不是keyup处理程序中的函数。这将引用html元素,而不是jQuery对象。您的处理程序正在被触发,但它在一开始就抛出了一个错误

解决方案 确保在适当的处理程序中使用jQuery对象。例如,将this.val更改为$this.val。我已经创建并演示了一些必需的修复。它不会完全起作用,因为您提供的代码不完整,但它应该向您显示一些所需的更正

笔记 在jQuery插件的范围内,这是一个jQuery对象。 在事件处理程序的范围内,这是一个HTML元素对象。 要获取给定HTML元素对象的jQuery对象,请执行$myHtmlElem,其中myHtmlElem是一个HTML元素对象。
alertthis.val是一个错误这是事件处理程序中的一个DOM元素,它会中断事件处理程序的执行。

查看javascript控制台,是否存在任何错误?是的,它在this.val上出现了问题,我认为这是一个jQuery对象。伙计,你太棒了!非常有魅力,感谢您为将其放入JSFIDLE而付出的额外努力!!谢谢你的回答。你也是对的,但我按照Spycho的回答做了,而且做对了。再次感谢!!:O
        this.each(function(){
    $(this).keyup(function(event){....});
});