我想通过使用在点击上运行的功能来更改它,以便更清楚地写出来。这是有效的代码:
menuHamburger.click(function () {
if($(this).hasClass("closed")){
$(this).removeClass("closed");
};
subMenu.removeClass("show");
if (mainSidebar.toggleClass('active')) {
return true;
}
});
我想用这种方式写它:
menuHamburger.click(function () {
closedHamburderOnClick();
if($(this).hasClass("closed")){
$(this).removeClass("closed");
};
subMenu.removeClass("show");
if (mainSidebar.toggleClass('active')) {
return true;
}
});
function closedHamburderOnClick(){
if($(this).hasClass("closed")){
$(this).removeClass("closed");
};
}
但它不起作用。如何解决?
答案 0 :(得分:0)
在这种特殊情况下,只需将$(this)
传递给您的函数并声明要使用的参数:
menuHamburger.click(function () {
closedHamburderOnClick($(this));
// (removed lines here I'm fairly sure you meant to remove in the question)
subMenu.removeClass("show");
if (mainSidebar.toggleClass('active')) {
return true;
}
});
function closedHamburderOnClick(elements){
if(elements.hasClass("closed")){ // You can get rid of this entirely
elements.removeClass("closed");
} // No ; after the block attached to control flow statements
}
如果您有某种原因需要致电closedHamburderOnClick
,以便其中的this
与您拨打电话时的内容相同,那么您需要使用Function#call
:
closedHamburderOnClick.call(this);
然后在其中使用this
:
function closedHamburderOnClick(){
if($(this).hasClass("closed")){ // You can get rid of this entirely
$(this).removeClass("closed");
} // No ; after the block attached to control flow statements
}
还有Function#apply
也以同样的方式处理this
,但call
和apply
处理不同的参数。
但在这种情况下,不需要call
或apply
。