Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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 如何设置$.fn。函数,以便在调用时执行它?_Javascript_Jquery - Fatal编程技术网

Javascript 如何设置$.fn。函数,以便在调用时执行它?

Javascript 如何设置$.fn。函数,以便在调用时执行它?,javascript,jquery,Javascript,Jquery,我有以下代码: function init() { var $contentButtonPanel: JQuery = $('#content-button-panel') $contentButtonPanel .find('.arbo .toggle, .collapsible-list li:has(ul) > :first-child, .collapsible-list li:has(ul) > :first-

我有以下代码:

    function init() {
        var $contentButtonPanel: JQuery = $('#content-button-panel')
        $contentButtonPanel
            .find('.arbo .toggle, .collapsible-list li:has(ul) > :first-child, .collapsible-list li:has(ul) > :first-child + span')
            .click(function (event) {
                $(this).toggleBranchOpen();
            });
    }

    $.fn.toggleBranchOpen = function () {
        this.each(function () {
            $(this).closest('li').toggleClass('closed');
        });
        return this;
    };
调试时,我可以看到$(this.toggleBranchOpen();到达终点线。但是,代码不在该函数内部


这是toggleBranchOpen声明方式的问题吗?请注意,使用toggleBranchOpen的唯一时间是在init函数click事件内部。我是否可以将代码移到init中并简化事情?

声明很好。因为您正在修改jQuery的原型,所以它将立即可用于所有jQuery对象

这句话让我很困惑

var $contentButtonPanel: JQuery = $('#content-button-panel')
我认为这只是因为您正在从较大的文件复制和粘贴。关于帮助识别问题,我唯一的建议是在这个循环中放入一些调试信息

this.each(function () {
    $(this).closest('li').toggleClass('closed');
});
除此之外,您的选择器是否可能没有找到任何
li
元素?

请尝试以下代码:

function init() {
    $('#content-button-panel')
        .find('.arbo .toggle, .collapsible-list li:has(ul) > :first-child, .collapsible-list li:has(ul) > :first-child + span')
        .click(function (event) {
            $(this).closest('li').toggleClass('closed');
        });
}
因为您表示不需要全局函数,所以我尝试稍微简化代码


希望这会有所帮助。

是的,将其移动到处理程序中会简化很多。特别是如果只需要一个事件,那么绝对没有理由让它成为所有jQuery实例的全局函数?它没有被执行吗?是否有错误?将
var$contentButtonPanel:JQuery=$(“#内容按钮面板”)$contentButtonPanel
替换为
$(“#内容按钮面板”)
。看起来太像语法了Error@Bergi:看起来真像。该代码不在FF中运行。它似乎不是有效的语法。