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中运行。它似乎不是有效的语法。