4

我正在尝试做一个切换功能,所以当你点击一个链接时它会做一件事,而当你再次点击同一个链接时它会做另一件事。我的问题是我使用的是最新版本的 Jquery,并且似乎 toggle-event 已弃用

在发现它已被弃用之前,我一直在尝试使用它。

$('#edit a').toggle(
     function(){
        editList();
    },
     function(){
        addList();
});

它在文档中说它已经绑定到点击。

4

5 回答 5

6

一个微型 jQuery 插件:

jQuery.fn.clickToggle = function(a,b) {
  var ab = [b,a];
  return this.on("click", function(){ ab[this._tog^=1].call(this); });
};


// USE LIKE:

$("button").clickToggle(function() {   
     console.log("AAA");
}, function() {
     console.log("BBB");
}); // Chain here other jQuery methods to your selector

取自我在这里的回答https://stackoverflow.com/a/21520499/383904


还有其他方法可以切换状态/值:

现场演示

var editAdd = [editList, addList],  // store your function names into array
    c = 0;                          // toggle counter

function editList(){                // define function
   alert('EDIT');
}
function addList(){                 // define function
   alert('ADD');
}

$('#edit a').click(function(e){  
  e.preventDefault();
  editAdd[c++%2]();                 // toggle array index and use as function
                                    // % = Modulo operator
});

%您可以使用
按位 XOR 运算符 代替模运算符,^例如:[c^=1]


使用 Array.reverse()
现场演示

var editAdd = [editList, addList];

function editList(){
   alert('EDIT');
}
function addList(){
   alert('ADD');
}

$('#edit a').click(function(e){  
  e.preventDefault();
  editAdd.reverse()[0]();
});

reverse 将在每次单击时反转我们的数组,我们需要做的就是获取 0 索引值[0]并运行该函数 name [0]()

于 2013-03-24T20:20:25.200 回答
4

您需要做的就是有一个变量或一个属性来指示要运行的函数,例如,使用自定义data-switch属性:

$('a').click(function(e){
    e.preventDefault();
    var that = $(this);
    switch (that.data('switch')){
        case 'a':
            // do something in situation 'a'
            console.log('Function one');
            that.data('switch','b');
            break;
        case 'b':
            // do something in situation 'b'
            console.log('Function two');
            that.data('switch','a');
            break;
    }
});

JS 小提琴演示

于 2013-03-24T20:12:57.160 回答
2

短而干净

var toggle = [addList, editList];
$('#edit a').click({
  var state = +$(this).data('toggle');
  toggle[state]();
  $(this).data('toggle',(1-state));
  return false;
});
于 2013-03-24T20:30:21.610 回答
2

在这里查看我对此的回答

此解决方案创建了一个切换函数,该函数由两个函数组成,每次调用时都会在两者之间交替。

var toggle = function (a, b) {
    var togg = false;
    return function () {
        // passes return value back to caller
        return (togg = !togg) ? a() : b();
    };
};

应用它

$('#btn').on('click', toggle (function (){
    return editList();
}, function (){
    return addList();
}));
于 2015-05-22T07:40:38.970 回答
1

不优雅,但快速修复:

$('#edit a').click({
  if($(this).data('toggleState') == 1) {
    toggleState = 0;
    addList();
  }
  else {
    toggleState = 1;
    editList();
  }

  $(this).data('toggleState', toggleState);
  return false;
});
于 2013-03-24T20:12:40.583 回答