Functie die waarden van een variabele isoleert en individuele functies aan elke variabele koppelt

Ik heb verschillende anker-tags en invoerknoppen die verschillende waarschuwingsberichten activeren. De waarschuwingsberichten zijn al gebouwd als functies. De triggers hebben verschillende klassen. Ik heb aparte scripts gemaakt om elk van deze triggers hun individuele functies te laten activeren. Nu probeer ik dit proces te stroomlijnen door een functie te bouwen waarmee de juiste waarschuwingsfunctie dynamisch wordt gekoppeld aan de juiste triggerklasse.

Ik heb een allTriggers-variabele gemaakt (zoals hieronder weergegeven) waarin ik alle klassen voor elke trigger kan laden.

var allTriggers = $('.firstColumn a, .uploadAttachment, .tabGroup .tab a, .checkForChanges')

Nee, hier is het deel waar ik mee worstel. Ik wil een functie bouwen die het juiste waarschuwingsbericht (de juiste functie) aan de juiste trigger koppelt

In andere woorden...

als de waarde van alleTriggers = de trigger met de klasse .uploadAttachment, voer dan de functie uploadFunction uit.

als de waarde van alleTriggers = de trigger met de klasse .firstColumn a, voer dan de functie removeMessageFunction uit.

enzovoorts.

Ik wil dit doen zodat een programmeur later kan binnenkomen en triggers en waarschuwingen kan toevoegen aan deze eenvoudige var en functie en het zal de lege plekken vullen in de rest van het script dat ik al werk.

De functie waaraan ik werk, is vergelijkbaar met de onderstaande, maar dit werkt niet

function popupOKFunction() {
        if (allTriggers == '.firstColumn a') {
                removeMessageFunction ();
        }
        if (allTriggers == '.uploadAttachment') {
                uploadFunction ();
        } 
}
0

1 antwoord

U mag twee feiten over JavaScript gebruiken: 1) men kan (bijna) elke tekenreeks gebruiken als een naam van de eigenschap van een object; 2) functies zijn eersteklas burgers en kunnen net zo worden gebruikt (opnieuw - bijna) de meeste waarden zouden dat zijn.

Dus wat nuttig voor je kan zijn, is geen functie - maar een object:

var controlHandlers = {
  '.firstColumn a': removeMessageFunction,
  '.uploadAttachment': uploadFunction,
  ...
};

... dan mag je het herhalen met zoiets als ...

for (var selector in controlHandlers) {
   $(selector).click(controlHandlers[selector]);  
}

UPDATE: the same approach will be useful if you eventually decide to use just a single function - but with different messages to be shown: these messages will be send in this function as param. Like this:

var controlMessages = {
  '.firstColumn a': "Do not ever touch this link! Ever!",
  '.uploadAttachment': "Now I'm angry!",
};
...
for (var selector in controlMessages) {
  $(selector).click(function() { 
    alertingFunction(controlMessages[selector]);
  });
}

alertingFunction in this case should be defined as taking a single parameter - message to be shown.

0
toegevoegd
bedankt raina77ow ... dat leidde me in de goede richting. ik hoefde alleen maar met de for-functie te spelen om het passend te maken voor mijn use-case, maar het var-idee hielp echt.
toegevoegd de auteur Scott, de bron