2

私がやろうとしているのは、選択を切断し、いくつかのホットキー(Ctrl+ aCtrl+ cCtrl+など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
    });
});

問題は、Firefoxでページを開くと、firebugで次のエラーメッセージが表示されることです。

$(":not(input,select,textarea)").disableSelection is not a function 

私は何が欠けていますか?助言がありますか?事前にThx

4

2 に答える 2

11

関数に jQuery を渡すのを忘れていました (実行するためです!):

(function($){

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

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

})(jQuery); // <--- you forgot this!
于 2012-07-17T15:58:14.943 に答える
4
(function($){
   ...
});

いいですね、IEFE クロージャは決して実行されませんでした (NEFE と呼ばれるべきです :-) )。括弧を追加して呼び出し、それらの間の引数 (例: ...(jQuery)) を関数に渡します。または、関数全体をそのままにしておきます。あなたの場合、クロージャーはまったく必要ありません。

ところで、あなたのページを使い物にならないようにしようとしてはいけません。また、コンテンツをコピー不可にしようとしても、コンテンツのコピーが妨げられることはないことを忘れないでください。

于 2012-07-17T15:58:40.637 に答える