Vraag jQuery: this.attr () geen functie?


Ik weet niet zeker of ik dit niet in de juiste scope of wat gebruik, maar ik heb een script dat in feite een linkklik vastlegt en ervoor zorgt dat de pagina vervaagt voordat hij naar de gekoppelde pagina gaat. Als de link echter een JavaScript is bij klikken, het script faalt.

Hier is mijn code:

<script type="text/javascript">

    pageObj = {
        init: function(){
            $("body").fadeTo("slow", 1);
        },
        redirectPage: function(redirect){
            window.location = redirect;
        },
        linkLoad: function(location){
            $("body").fadeOut(1000, this.redirectPage(location));
        }
    };

    $(document).ready(function() {
        pageObj.init();

        $("a").click(function(e){
            e.preventDefault();
            if (this.attr('onclick') !== undefined) {
                eval(this.attr('onclick').val());
            } else {
                var location = this.href;
                pageObj.linkLoad(location);
            }
        });
    });

</script>


Zoals je kunt zien, probeer ik een controle uit te voeren om te zien of de link de bij klikken attribuut, en bel dan de bij klikken functie als deze bestaat. Hoe kan ik dit bereiken?


19
2018-02-06 17:49


oorsprong


antwoorden:


Terwijl Diodeus correct is, moet je dit inpakken this in een jQuery-verzameling voor gebruik attr() (het is een methode van een jQuery-verzameling, niet van een HTMLElement), kunt u net zo goed overslaan attr().

$("a").click(function(e){
    var location;
    e.preventDefault();
    if ($.isFunction(this.onclick)) {
        this.onclick.call(this, e);
    } else {
        location = this.href;
        pageObj.linkLoad(location);
    }
});

Merk op dat ik de eigenschap heb gebruikt (wanneer een HTML-document wordt geladen, worden attributen meestal vooraf in eigenschappen geladen, met on_______ attributen die worden voorgeladen als methoden. Merk ook op dat ik het gebruikte this.onclick.call() liever dan eval(), instellen van de juiste this voor onclick methoden en om toegang tot het gebeurtenisobject als argument te garanderen.


4
2018-02-06 18:02



Gebruik: $(this).attr in plaats van this.attr

Dit dwingt het in de context van jQuery.


68
2018-02-06 17:50