Micro jQuery Plugin
Wenn Sie Ihre eigene verkettbare clickToggle jQuery-Methode möchten , können Sie dies wie folgt tun:
jQuery.fn.clickToggle = function(a, b) {
return this.on("click", function(ev) { [b, a][this.$_io ^= 1].call(this, ev) })
};
$('button').clickToggle(function(ev) {
$(this).text("B");
}, function(ev) {
$(this).text("A");
});
<button>A</button>
<button>A</button>
<button>A</button>
<script src="//code.jquery.com/jquery-3.3.1.min.js"></script>
Einfache Funktionen Toggler
LIVE DEMO
function a(){ console.log('a'); }
function b(){ console.log('b'); }
$("selector").click(function() {
return (this.tog = !this.tog) ? a() : b();
});
Wenn Sie es noch kürzer haben möchten ( warum sollte es eines geben, oder?! ), Können Sie den Bitwise XOR * Docs- Operator wie folgt verwenden :
DEMO
return (this.tog^=1) ? a() : b();
Das ist alles.
Der Trick besteht darin, für das thisObjekt eine booleanEigenschaft togfestzulegen, diese mit negation ( tog = !tog) umzuschalten
und die erforderlichen Funktionsaufrufe in einen bedingten Operator einzufügen ?:
Im Beispiel von OP (auch mit mehreren Elementen) könnte es so aussehen:
function a(el){ $(el).animate({width: 260}, 1500); }
function b(el){ $(el).animate({width: 30}, 1500); }
$("selector").click(function() {
var el = this;
return (el.t = !el.t) ? a(el) : b(el);
});
AUCH : Sie können -toggle auch wie folgt speichern :
DEMO :
$("selector").click(function() {
$(this).animate({width: (this.tog ^= 1) ? 260 : 30 });
});
aber es war nicht die genaue Anfrage des OP für ihn looking for a way to have two separate operations / functions
Hinweis : Dadurch wird nicht der aktuelle Umschaltstatus gespeichert, sondern nur unsere Funktionspositionen im Array umgekehrt (es hat seine Verwendung ...).
Sie speichern einfach Ihre a, b- Funktionen in einem Array. Klicken Sie einfach auf, um die Array-Reihenfolge umzukehren, und führen Sie die folgende array[1]Funktion aus:
LIVE DEMO
function a(){ console.log("a"); }
function b(){ console.log("b"); }
var ab = [a,b];
$("selector").click(function(){
ab.reverse()[1]();
});
EINIGES MASHUP!
jQuery DEMO
JavaScript DEMO
Erstellen Sie eine nette Funktion toggleAB(), die Ihre beiden Funktionen enthält, fügen Sie sie in das Array ein und führen Sie am Ende des Arrays einfach die Funktion [ 0 // 1] aus, abhängig von der togEigenschaft, die aus der this Referenz an die Funktion übergeben wird :
function toggleAB(){
var el = this;
return [
function() { console.log("b"); },
function() { console.log("a"); }
][el.tog^=1]();
}
$("selector").click( toggleAB );
toggle()saugt nicht, es tut einfach nicht das, was du brauchst;)