如何切换调用另一个函数的类

时间:2018-05-16 20:41:29

标签: javascript jquery function

这是原始功能:

$(document).on('click', '.itemove', function() {
    $('.itemoveact').removeClass('itemoveact');
    $(this).addClass('itemoveact');
});

现在我想通过调用另一个函数来做同样的事情:

$(document).on('click', '.itemove', function() {
    swclass('itemoveact');
});

function swclass(c){
    $('.' + c).removeClass(c);
    $(this).addClass(c);
}

什么都没发生。传递this上下文存在问题。

任何帮助?

4 个答案:

答案 0 :(得分:1)

您可以使用Function.prototype.apply()

$(document).on('click', '.itemove', function() {
   swclass.apply(this, ['itemoveact']);
});

答案 1 :(得分:0)

swclass函数

function swclass(c){
   $('.' + c).removeClass(c);
   $(this).addClass(c);
}

this只是一个指向window对象的引用

一种解决方案是使用bind方法。

  

bind()方法创建一个新函数,当被调用时,它具有它   此关键字设置为提供的值,具有给定的序列   调用新函数时提供的任何参数。

$(document).on('click', '.itemove', function() {
    swclass.bind(this)('itemove');
});

function swclass(c){
    $('.' + c).removeClass('red');
    $(this).addClass('blue');
}
.red{
  color:red;
}
.blue{
   color:blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="itemove red">Hello</p>

答案 2 :(得分:0)

尝试以下

$(document).on('click', '.itemove', function() {
    swclass.bind(this)('itemoveact');
});

function swclass(c){
    $('.' + c).removeClass(c);
    $(this).addClass(c);
}
  

swclass.bind(本)(&#39; itemoveact&#39);

绑定功能将适用于您的“#itemove&#39; to swclass function然后拨打电话。

这个阅读会有所帮助 What is the scope of variables in JavaScript?

答案 3 :(得分:0)

你可以通过一些箍来改变this的值,但是将它作为一个参数传递会更容易,更简单:

$(document).on('click', '.itemove', function() {
    swclass('itemoveact', this);
});

function swclass(c, addTo){
    $('.' + c).removeClass(c);
    $(addTo).addClass(c);
}