我有以下代码:
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中并简化操作吗?
答案 0 :(得分:1)
请尝试以下代码:
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');
});
}
由于您表示您不需要全局函数,因此我尝试简化代码。
希望有所帮助。
答案 1 :(得分:0)
声明没问题。由于您正在修改jQuery的原型,因此它将立即可供所有jQuery对象使用。
这条线令我感到困惑,
var $contentButtonPanel: JQuery = $('#content-button-panel')
我认为这只是因为你正在从一个更大的文件中复制和粘贴。我唯一的建议是帮助识别问题,将一些调试信息放在这个循环中;
this.each(function () {
$(this).closest('li').toggleClass('closed');
});
除此之外,您的选择器是否可能找不到任何li
元素?