Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问jQuery插件功能?_Javascript_Jquery - Fatal编程技术网

Javascript 如何访问jQuery插件功能?

Javascript 如何访问jQuery插件功能?,javascript,jquery,Javascript,Jquery,所以我有一个jQuery插件,它工作得非常好。在这个插件中,有一个HTML按钮分配给togglePushy()方法,它工作得很好 但是,我想从Javascript控制台使用这个方法。问题是如果type$.togglePushy()它说它未定义。我如何访问它 $(function() { var pushy = $('.pushy'), //menu css class body = $('body'), container = $('#container'

所以我有一个jQuery插件,它工作得非常好。在这个插件中,有一个HTML按钮分配给
togglePushy()方法,它工作得很好

但是,我想从Javascript控制台使用这个方法。问题是如果type
$.togglePushy()它说它未定义。我如何访问它

$(function() {
    var pushy = $('.pushy'), //menu css class
        body = $('body'),
        container = $('#container'), //container css class
        push = $('.push'), //css class to add pushy capability
        siteOverlay = $('.site-overlay'), //site overlay
        pushyClass = "pushy-left pushy-open", //menu position & menu open class
        pushyActiveClass = "pushy-active", //css class to toggle site overlay
        containerClass = "container-push", //container open class
        pushClass = "push-push", //css class to add pushy capability
        menuBtn = $('.menu-btn, .pushy a'), //css classes to toggle the menu
        menuSpeed = 200, //jQuery fallback menu speed
        menuWidth = pushy.width() + "px"; //jQuery fallback menu width

    function togglePushy(){
        body.toggleClass(pushyActiveClass); //toggle site overlay
        pushy.toggleClass(pushyClass);
        container.toggleClass(containerClass);
        push.toggleClass(pushClass); //css class to add pushy capability
    }

    function openPushyFallback(){
        body.addClass(pushyActiveClass);
        pushy.animate({left: "0px"}, menuSpeed);
        container.animate({left: menuWidth}, menuSpeed);
        push.animate({left: menuWidth}, menuSpeed); //css class to add pushy capability
    }

    function closePushyFallback(){
        body.removeClass(pushyActiveClass);
        pushy.animate({left: "-" + menuWidth}, menuSpeed);
        container.animate({left: "0px"}, menuSpeed);
        push.animate({left: "0px"}, menuSpeed); //css class to add pushy capability
    }

    menuBtn.click(function() {
        togglePushy();
    });
});

我不知道最好的解决办法。但是,您可以通过将函数保持在domaready事件处理程序之外来实现这一点,如下所示

function togglePushy(){
    body.toggleClass(pushyActiveClass); //toggle site overlay
    pushy.toggleClass(pushyClass);
    container.toggleClass(containerClass);
    push.toggleClass(pushClass); //css class to add pushy capability
}

function openPushyFallback(){
    body.addClass(pushyActiveClass);
    pushy.animate({left: "0px"}, menuSpeed);
    container.animate({left: menuWidth}, menuSpeed);
    push.animate({left: menuWidth}, menuSpeed); //css class to add pushy capability
}

function closePushyFallback(){
    body.removeClass(pushyActiveClass);
    pushy.animate({left: "-" + menuWidth}, menuSpeed);
    container.animate({left: "0px"}, menuSpeed);
    push.animate({left: "0px"}, menuSpeed); //css class to add pushy capability
}

$(function() {
    var pushy = $('.pushy'), //menu css class
        body = $('body'),
        container = $('#container'), //container css class
        push = $('.push'), //css class to add pushy capability
        siteOverlay = $('.site-overlay'), //site overlay
        pushyClass = "pushy-left pushy-open", //menu position & menu open class
        pushyActiveClass = "pushy-active", //css class to toggle site overlay
        containerClass = "container-push", //container open class
        pushClass = "push-push", //css class to add pushy capability
        menuBtn = $('.menu-btn, .pushy a'), //css classes to toggle the menu
        menuSpeed = 200, //jQuery fallback menu speed
        menuWidth = pushy.width() + "px"; //jQuery fallback menu width



    menuBtn.click(function() {
        togglePushy();
    });
});

然后直接调用togglePushy()。

也许您可以将
togglePushy
更改为如下内容:

$.togglePushy = function(){ 
    body.toggleClass(pushyActiveClass); //toggle site overlay
    pushy.toggleClass(pushyClass);
    container.toggleClass(containerClass);
    push.toggleClass(pushClass); //css class to add pushy capability
}
现在,您应该能够以$.togglePushy()的形式访问它。

您的togglePushy()函数仅在jQuery闭包(匿名函数)的上下文(范围)中定义。而是在全局范围中定义它(在文件的其他地方,而不是作为“函数参数”)

如果需要来自该范围的变量,请将它们封装在命名空间(对象)中,或将其声明为
window.togglePushy()=function(){/*…*/}


在我看来不像jquery插件。试着切换一下pushy();将不起作用,因为此代码包装在一个匿名函数中,该函数传递给$…我尝试了togglePushy();它说ReferenceError:togglePushy没有定义,键入$.togglePushy();将导致TypeError:undefined不是一个functionWell,因为单击处理程序中只有
togglePushy()
一行,是否有特定的原因不能直接触发
menuBtn.click()
?menuBtn也未定义。我不知道如何访问此对象中的属性和方法
$(document).ready(function() {
  ...
  .....
  window.togglePushy()= function() {
    //to do
  } 
});
$(document).ready(function(){
    $('button').click(function(){
        $.togglePushy();
    });
});