Domanda

Supponiamo di avere un numero di collegamenti di colore rosso e di voler aggiungere loro un evento clic in modo tale che quando si attiva, invii l'attributo HREF del collegamento al server (come richiesta AJAX) e, in caso di successo, il colore del collegamento verrà modificato al verde.Voglio qualcosa del tipo:

$$('a.red').addEvent(
    "click",
    function () {
        new Request.JSON({
            url: 'script.php', 
            onSuccess: function(){
                [the link wich is clicked].setStyle('color', 'green');
                return false;
            }
        }).get("url="+[url of the link]);
    }
);

Scusate se la domanda è sciocca.per favore modifica il titolo con uno sensato.

È stato utile?

Soluzione

Il problema qui è questo this all'interno del gestore eventi non è la stessa cosa di this all'interno della classe richiesta.Quindi quello che di solito viene fatto è cambiare il riferimento a this in una nuova variabile, ad esempio var self = this.

Dopodiché puoi usare self.setStyle('color', 'green');

A proposito, un suggerimento, la cosa migliore sarebbe avere anche una classe per il colore verde e cambiarla al momento del clic.

Quindi ecco un suggerimento sul codice che sarebbe:

$$('a.red').addEvent("click", function (event) {
    var self = this;
    event.stop();
    new Request.JSON({
        url: 'script.php',
        onSuccess: function () {
            self.removeClass('red').addClass('green');
            return false; // I added event.stop(), presume that is what you meant. Do this line can be removed
        }
    }).get("url=" + self.href);
});

e utilizzando nel CSS qualcosa del tipo:

.green {
    color: green;
}

Esempio

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top