JavaScript";不是一个函数;问题

JavaScript";不是一个函数;问题,javascript,jquery,function,Javascript,Jquery,Function,我试图做的是断开选择,取消一些热键(如Ctrl+a、Ctrl+c和Ctrl+s) 我的代码是这样的 (function($){ $.fn.ctrl = function(key, callback) { if(typeof key != 'object') key = [key]; callback = callback || function(){ return false; } return $

我试图做的是断开选择,取消一些热键(如Ctrl+a、Ctrl+c和Ctrl+s)

我的代码是这样的

(function($){

    $.fn.ctrl = function(key, callback) {
        if(typeof key != 'object') key = [key];
        callback = callback || function(){
            return false;
        }
        return $(this).keydown(function(e) {
            var ret = true;
            $.each(key,function(i,k){
                if(e.keyCode == k.toUpperCase().charCodeAt(0) && e.ctrlKey) {
                    ret = callback(e);
                }
            });
            return ret;
        });
    };


    $.fn.disableSelection = function() {
        $(window).ctrl(['a','s','c']);
        return this.each(function() {           
            $(this).attr('unselectable', 'on')
            .css({
                '-moz-user-select':'none',
                '-o-user-select':'none',
                '-khtml-user-select':'none',
                '-webkit-user-select':'none',
                '-ms-user-select':'none',
                'user-select':'none'
            })
            .each(function() {
                $(this).attr('unselectable','on')
                .bind('selectstart',function(){
                    return false;
                });
            });
        });
    }
});
$(document).ready(function() {
    $(':not(input,select,textarea)').disableSelection(); <== ERROOR
    $("#navigation").treeview({
        persist: "location",
        collapsed: true,
        unique: true
    });
});

我错过了什么?有什么建议吗?Thx提前

您忘记将jQuery传递给您的函数(为了执行它!):

(函数($){
$.fn.ctrl=函数(键,回调){…}
$.fn.disableSelection=函数(){…}
})(jQuery);//
这很好,一个从未执行过的(应该称为NEFE:-)。通过附加括号调用它,并在括号之间传递参数(例如,
…(jQuery)
)到。或者不使用整个函数,在您的情况下,根本不需要闭包


顺便说一句,你不应该试图使你的网页不可用-用户会逃离它。不要忘记,试图使内容不可复制并不能阻止内容被复制。

在没有任何解释的情况下,我认为这是一条注释。@Chris,即时执行的函数表达式从未执行过,这是正确的答案。不过,我明白,简单地称之为“NEFE”对于显然不理解的人来说,这几乎没有什么用处。这里的目标是找到一个答案——一个对所述问题有用的解决方案。扔掉笑脸和首字母缩写不是一个有用的解决办法。@Chris:好的,这取决于OP的知识。这样的错误(NEFE甚至不扔任何东西)在工作数小时后很难发现——如果他知道这个模式,我的答案就足够了。对于那些没有这样做的人,我现在添加了一些链接。感谢你澄清了答案——我已经删除了我的否决票。不明白,问题出在哪里?@Neal:你的帖子不应该说“你忘了在末尾附加(jQuery)”吗。因为他已经在传递“$”否。函数具有参数
$
,但除非您将某个内容传递给函数调用,否则,$是未定义的,不是函数。
$(":not(input,select,textarea)").disableSelection is not a function 
(function($){

    $.fn.ctrl = function(key, callback) { ... }

    $.fn.disableSelection = function() { ... }

})(jQuery); // <--- you forgot this!
(function($){
   ...
});