2017-07-18 4 views
1

Ich versuche, eine Funktion aufzurufen, die bereits mit Ereignislistenern funktioniert.JQuery übergibt Wert an Funktion, die Ereignisobjekt akzeptiert Argument

Zum Beispiel ich mein Event-Listener:

$('#country_choice').on('change', {opt: 1}, revealOption); 

und die revealOption Funktion enthält eine switch-Anweisung:

function revealOption(event){ 
     var n = event.data.opt; 
     switch(n) { 
      case 1: 
       // 1 reveal city 
       $('#city_form').removeClass('hidden'); 
       //alert("Reveal city"); 
       break; 
      case 2: 
       // 2 reveal produce 
       $('#prod_form').removeClass('hidden'); 
       //alert("Reveal prod"); 
       break; 
      case 3: 
       // 3 reveal all 
       $('#city_form').removeClass('hidden'); 
       $('#prod_form').removeClass('hidden'); 
       alert("Reveal all"); 
       break; 
     }  
    } 

aber ich versuche, in anderen um diese Funktion nutzen können Funktionen, die nicht Teil des Event-Handlers sind.

Ich würde es vorziehen zu vermeiden, eine andere Funktion zu schreiben, um die gleiche Aufgabe zu tun, aber es schwierig zu finden, herauszufinden, ob es möglich ist.

Die nächste Frage, die ich bei der Untersuchung von SO gefunden habe, ist function handle jQuery event and parameter?, jedoch handelt es sich dabei um die Übergabe des Ereignisobjekts an eine andere Funktion, die keinen Wert übergibt.

Jede Hilfe wäre dankbar geschätzt :)

+1

zu überprüfen. Ich würde vorschlagen, Ihren Code so zu refactorisieren, dass Sie die Argumente direkt an die Funktion übergeben, zB 'function revealOption (opt)'. Die Angabe der Funktionsreferenz zu einem Event-Handler ist ein guter syntaktischer Zucker, den JS anbietet, aber Sie können sich schnell in Knoten einbinden, wenn Sie den Umfang dieser Funktion ändern müssen. –

Antwort

2

Sie entweder das gleiche Objekt übergeben haben würde

var evt = { 
    data : { 
     opt : 3 
    } 
} 


function dev(){ 
    revealOption(evt); 
} 

oder die Funktion für beide Objekt ein Ereignis zu überprüfen, ändern und eine ganze Zahl oder eine Zeichenkette oder etwas anderes usw.

function revealOption(event){ 
    var n = typeof event === 'object' ? event.data.opt : event; 

Dann rufen Sie könnten es als

revealOption(3) 

Wenn Sie benutzerdefinierte übergeben wollen Objekte als auch, würden Sie für eine Eigenschaft des Objekts zu überprüfen, die auf das Ereignis Objekt einzigartig ist usw.

+0

Vielen Dank für alle Antworten, jede funktionierte gut, aber akzeptierte die Antwort, die ich letztendlich verwendete. –

0

Ich würde es eher einfach halten und die revealOption Methode ändern Option annehmen.

function revealOption(n) { 
    switch (n) { 
     ... 
    } 
} 

$('#country_choice').on('change', { 
    opt: 1 
}, function (event) { 
    revealOption(event.data.opt); 
}); 

function dev() { 
    revealOption(3); 
} 
0

Oder einfach ternären Operator wie diese Dies ist fast ein Anti-Muster ein gutes Beispiel dafür, warum das Hinzufügen von benutzerdefinierten Daten zu Veranstaltungen

var n = (event.data && event.data.opt) ? event.data.opt : event; 
Verwandte Themen