Frage

Ich versuche, das Onclick-Ereignis zu einem Anker-Tag zuzuweisen, die bereits vorhanden ist, wenn ich auf ein anderes Element klicken. Aber alles, was ich versucht habe, scheint in dem Abfeuern der Veranstaltung unmittelbar nach der Abtretung zur Folge hat. Wir verwenden Prototype und Scriptaculous.

Dies ist die Funktion:

<script type="text/javascript">     
    function loadData(step, dao_id) {
        var div_id = 'div_' + step;
        var anchor_id = 'step_anchor_' + step;
        var prv = step -1;

        switch(step) {
            case 1:
                var action = 'major_list';
                break;
            case 2:
                var action = 'alumni_list';
                break;
            case 3:
                var action = 'alumnus_display';
                break;
        }

        new Ajax.Request('awizard.php', {
                method: 'get',
                parameters: {action : action, dao_id : dao_id},
                onSuccess: function(data) {
                    $(div_id).innerHTML = data.responseText;
                    //$(anchor_id).observe('click', loadData(prv, dao_id, true));
                    //Event.observe(anchor_id, 'click', alert('I executed'));

                    showStep(step);

                    //$(anchor_id).onclick = loadData(prv, dao_id, true);
                    //$(anchor_id).observe('click', loadData(prv, dao_id, true));

                }
            }
        )                   
    }

    function showStep(step, toggleBack) {

        var div_id = 'div_' + step;
        if(!toggleBack) {
            if(step != 1) {
                var prv = step -1;
                Effect.SlideUp('div_' + prv, { duration:1, delay:0 });
            }

            Effect.SlideDown(div_id, { duration:1, delay:1 });
            Effect.Appear('step_anchor_' + step, { duration:1, delay:2 });
        } else {

            var prv = step -1;
            Effect.SlideDown('div_' + prv, { duration:1, delay:0 });
            Effect.SlideUp(div_id, { duration:1, delay:1 });
            Effect.Fade('step_anchor_' + step, { duration:1, delay:2 });
        }               
    }
</script>

Wie Sie sagen ich habe versucht, mehr Möglichkeiten, das Onclick-Ereignis an den Anker-Tag zuweisen und keiner von ihnen richtig. Zuerst ging ich davon aus, dass die Effect.Appear Funktion auf dem Anker-Tag könnte das Onclick-Ereignis feuern, so habe ich versucht, um das Ereignis Zuordnung zu bewegen, nachdem die showStep Funktion, aber das hat keinen Unterschied machen. Außerdem habe ich versucht, die Funktion stop () unmittelbar nach der Zuordnung aufrufen, aber das hat keinen Unterschied entweder machen.

Ich bin mit meinem Latein mit diesem Ende. Gibt es für mich eine Möglichkeit, das Onclick-Ereignis an den Anker-Tag zuweisen, ohne das Ereignis automatisch Feuer zu haben? Was mache ich falsch?

War es hilfreich?

Lösung

Funktionen sind erste Klasse Objekt in Javascript, bedeutet dies, können Sie sie zu Variablen zuweisen oder sie als Argumente an andere Funktionen übergeben. In Ihrem Code, sind verwirrend Sie Funktion mit Bezug auf Funktionen aufruft.

Werfen Sie einen Blick auf diesen Code:

$(anchor_id).observe('click', loadData(prv, dao_id, true));

Was ist das das Ergebnis des Aufrufs „loaddata“, um die Funktion beobachten passieren. Was Sie tun möchten, ist ein Verweis auf die Funktionsaufruf übergeben statt. Sie können es leicht beheben, indem Sie den Code in das Ändern:

$(anchor_id).observe('click', function() { loadData(prv, dao_id, true) } );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top