Funktionsname aus Variable generieren

Joschi1711

Mitglied
Hallo Leute,
ein neues Problem steht bei mir an:
Ich habe eine Reihe von Funktionen:
Code:
function loadz1(){        
            $('.Zepter1').screwDefaultButtons('check');  
       }
function loadd1(){        
            $('.Dolch1').screwDefaultButtons('check');  
       }
function loads1(){        
            $('.Stab').screwDefaultButtons('check');  
       }
function loadd2(){        
            $('.Dolch2').screwDefaultButtons('check');  
       }
function loadf2(){        
            $('.Fokus2').screwDefaultButtons('check');  
       }

welche ich bedingt aufrufen möchte.
Bedingung sind die Variablenwerte aus:
Code:
    imgw1 = 'd1'; 
    ....
    imgw4 = 'f4'; 
   .....
möglich Werte sind derzeit d1,z1,s1 und d2,f2

ist es möglich, ohne If dem Funktionnamen aus der Variablen zu erzeugen
in der Form load"Variable"(); ?
 
Diese Fragestellung ist ähnlich zu deiner vorigen und meine Antwort ist es auch: Mit eval() kann man solche dynamische Funktionsnamen verwenden, aber IMO ist das nicht zu empfehlen und ich würde dir statt dessen raten, auch hier ein Objekt anzulegen, aus dem Du die Selektoren ermittelst. Das einzige, was in den einzelnen Funktionen verschieden ist, ist ja der Selektor, z. B. '.Dolch2' und der ist abhängig von den Variablenwerten. Dann brauchst Du nur eine einzige Funktion in der Form:
Code:
function load () {
    key = // hier den Schluessel aus den Variablen zusammen bauen
    sel = assignment[key];
    $('.' + sel).screwDefaulButtons('check');
}
 
Verzwickte Sache...
irgendwo habe ich nen Denkfehler.

Ich habe eine funktion start
Code:
function start() {
        if (BuildId==1) {
    imgw1 = 'd1'; 
    imgw2 = 'd2'; 
    imgw3 = 'd3';
    imgw4 = 'f4'; 
    imgw5 = 'f5';
    hfskillname1 = 'Arkane Brillanz';
    hfskillname2 = 'Arkane Macht';
    hfskillname3 = 'Erdrüstung';
    hfskillname4 = 'Nebelform';
    hfskillname5 = 'Tornado';
    
    changew1(imgw1);
    changew2(imgw2);
    changew3(imgw3);
    changew4(imgw4);
    changew5(imgw5);
    window.hf = 1;
    imgName = hfskillname1;
    changeImage(imgName);
    window.hf = 2;
    imgName = hfskillname2;
    changeImage(imgName);
    window.hf = 3;
    imgName = hfskillname3;
    changeImage(imgName);
    window.hf = 4;
    imgName = hfskillname4;
    changeImage(imgName);
    window.hf = 5;
    imgName = hfskillname5;
    changeImage(imgName);
   load ();
    }    
  }
die lade ich via
Code:
window.onload=function()
{
 start();

}
in der ich den Variablen Werte zuweise und die endsprechenden Bilder zuweise. Funktioniert alles soweit, nur der Funktionsaufruf load () funktioniert nicht, sprich die endsprechenden Radiobuttons werden nicht auf checked gesetzt.

die Funktion dazu:
Code:
function load  () {
  key = imgw1;
  sel = assignment[key];
  $('.' + sel).screwDefaultButtons('check');
}

die Buttons schaun so aus:
Code:
<div id="waffenwahl">
  <div id="waffen2">
  
  
  
  <div class="waffe"><input type="radio" id="Zepter1" name="Hand1" title="Zepter" class="Zepter1 z1" onclick="changew1('z1');changew2('z2');changew3('z3');" data-sdb-image="url('images/Waffen/zepter.png')"/></div>
  <div class="waffe"><input type="radio" id="Dolch1" name="Hand1" title="Dolch" class="Dolch1 d1" onclick="changew1('d1');changew2('d2');changew3('d3');" data-sdb-image="url('images/Waffen/dolch.png')"/></div>
  <div class="waffe"><input type="radio" id="Stab" name="Hand1" title="Stab" class="Stab s1 zweihand"  onclick="zweihand();changew1('s1');changew2('s2');changew3('s3');changew4('s4');changew5('s5');" data-sdb-image="url('images/Waffen/stab.png')"/></div>

  <div class="waffe"><img src="images//röm1.png"/> </div>
  
  <div class="waffe"><input type="radio" id="Dolch2" value="no" name="Hand2" class="Dolch2 d2 zweithand" title="Dolch"  onclick="zweithand();changew4('d4');changew5('d5');" data-sdb-image="url('images/Waffen/dolch.png')"/></div>
  <div class="waffe"><input type="radio" id="Fokus2" value="no" name="Hand2" class="Fokus2 f2 zweithand" title="Fokus"  onclick="zweithand();changew4('f4');changew5('f5');" data-sdb-image="url('images/Waffen/fokus.png')"/></div>
  
  </div>

finde den Fehler nicht :mad:...
 
Sei noch gesagt welche scripts ich verwende:

Code:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="js/builds.js"></script>                                                    hier sind alle scripts abgelegt
<script src="js/jquery.screwdefaultbuttonsV2.js"></script>             script für die Buttons
<script src="js/waffenfertigkeiten.js"></script>                                script mit Variablenzuweisungen
 
Hast Du auch das Objekt assignment definiert? Der Name ist nur ein Platzhalter, Du solltest einen verwenden, der deine eigenen Gegebenheiten beschreibt.
Und für das hier:
Code:
    hfskillname1 = 'Arkane Brillanz';
    hfskillname2 = 'Arkane Macht';
    hfskillname3 = 'Erdrüstung';
    hfskillname4 = 'Nebelform';
    hfskillname5 = 'Tornado';

    window.hf = 1;
    imgName = hfskillname1;
    changeImage(imgName);
    window.hf = 2;
    imgName = hfskillname2;
    changeImage(imgName);
    window.hf = 3;
    imgName = hfskillname3;
    changeImage(imgName);
    window.hf = 4;
    imgName = hfskillname4;
    changeImage(imgName);
    window.hf = 5;
    imgName = hfskillname5;
    changeImage(imgName);
würde sich eine Optimierung anbieten:
Code:
    var skillnames = [
        'Arkane Brillanz',
        'Arkane Macht',
        'Erdrüstung',
        'Nebelform',
        'Tornado'];
    for (var i = 0; i < skillnames.length; i++) {
        window.hf = i + 1;
        changeImage(skillnames[i]);
    }
Möglicher Weise könnte man auch dies:
Code:
    changew1(imgw1);
    changew2(imgw2);
    changew3(imgw3);
    changew4(imgw4);
    changew5(imgw5);
einbeziehen, aber dazu müsste man wissen, wie diese Funktionen aufgebaut sind.
 
Zuletzt bearbeitet:
Im Moment ist die Luft raus :(
die Variablen, welche da jetz feste werte haben, sollen im nächsten Schritt aus Mysql geladen werden anhand der BuildId, daher lasse ich das mal außen vor.
Ich habe den Buttons mehrere class zugeordnet ( class="Stab s1 zweihand") wobei das s1 der Variable imgw1=s1 endsprechen würde.
sprich bei $('.s1').screwDefaultButtons('check'); sollte es doch den Button Stab checked setzen, tut es aber nicht.

Ich hänge mal alles drann, aber Achtung, alles noch etwas wild, vielleicht versteht man da besser was mein Problrm ist.

muss leider erscht mal pausieren, andere "Arbeit" wartet ^^
 

Anhänge

  • Builds.rar
    4,6 MB · Aufrufe: 6
Da hast Du dir ja ein ziemlich kompliziertes Projekt vorgenommen. Nein, aus den Dateien verstehe ich nicht, was das Problem ist, ist zu umfangreich. In Ele.php gibt es rechts oben so eine Leiste mit Symbolen, die wie Radiobuttons funktionieren. Willst Du da beim Laden den richtigen aktivieren? Die Klassen, von denen Du oben sprichst, finde ich in den Dateien nicht.
 
Zuletzt bearbeitet:
Es gibt mehrere Radiobuttons und ja es handelt sich um die oben rechts.
diese sollen halt wenn die Url eine BuildId enthält checked sein, was leider nicht so will wie es soll.
Am Ende sollen alle wesentlichen Variablen in der DB hinterlegt werden und bei vorhandener BuildId geladen werden.
Die test.php ist die, an der ich gerade rumwerkel. Die Buttons sind die von Zeile 49 bis 64 , welche je nach Variable checked werden sollen.
das script soll laut screwdefaultbuttonsV2.js so: $('.xxxxxxx').screwDefaultButtons('check'); die Radiobuttons checked setzen.
was sie aber selbst wenn ich direkt nach den Buttons in der test.php das script einfüge nicht tun.
 
Code:
$('#Dolch1').screwDefaultButtons('check');
habe ich auf Verdacht probiert und funktioniert.
Ebenso
Code:
$('.dolch1').screwDefaultButtons('check');
wenn ich beim Buttton class="einhand dolch1" notiere.
 
PS: Das genannte habe ich hier:
Code:
    <script type="text/javascript">
        $(function(){
       
            $('input:radio').screwDefaultButtons({
                image: 'url("images/radioSmall.jpg")',
                width: 60,
                height: 60
            });
           
            $('input:checkbox').screwDefaultButtons({
                image: 'url("images/checkboxSmall.jpg")',
                width: 60,
                height: 60
            });

            $('.dolch1').screwDefaultButtons('check');
           
       
        });
notiert. Am besten ist es, wenn Du die Aktionen für DOM-ready nur an einer Stelle notierst, es kommt sonst leicht zu Überschreibern.
 
Zurück