JQuery-gegevens + JQuery-tabbladen = an is ongedefinieerde fout

Ik gebruik datatables binnen de tabbladen van jQuery ui. Alles werkt zoals verwacht, behalve één probleem. Ik wil graag een klik activeren of een ander tabblad selecteren, afhankelijk van de hash-waarde van de URL.

Dit is wat ik bedacht

$(document).ready(function() {
    var hash = window.location.hash;
    if (hash == '') hash = 'add';
    hash = hash.replace('#', '');
    $("a[href=#"+hash+"]").click();
});

Dit zou normaal moeten werken, maar dat gebeurde niet. an is undefined probleem jaagt me de laatste 7 uur na.

Ik heb ook een andere aanpak geprobeerd om het probleem op te lossen. Bijvoorbeeld in plaats van te proberen .trigger ('klik') of .click() te gebruiken, besloot ik om te proberen met de optie jQuery UI Tabs, selecteer;

$(document).ready(function() {
    var hash = window.location.hash;
    if (hash == '') hash = 'add';
    hash = hash.replace('#', '');

    i = 0;
    $('ul#tablinks li a').each(function() {
        href = $(this).attr('href');
        if (href === '#'+hash)  $( ".tabs" ).tabs("option", "selected", 2); 

        i = i + 1;
    });
});

No matter what I do it I touch anything on tabs menu, I get an is undefined for ( var i=0, iLen=an.length ; i error.

Heeft iemand soortgelijke problemen ondervonden met de datatables + jQuery ui-tabbladen of heeft u misschien enkele adviezen ...

Alvast bedankt voor je tijd en zorg.

1
U mist een afsluitende apostrof in de regel, na de sluitende accolade: $ ('a [href = #' + hash + ']). Klik (); , is dat een typfout of is dat hetzelfde als je live script?
toegevoegd de auteur David Thomas, de bron
@Pixeler: je zou dat als antwoord moeten posten, omdat het je vraag heeft opgelost. Aan de andere kant, hebt u overwogen om $ (venster) .load() te gebruiken in plaats van $ (document) .ready() ?
toegevoegd de auteur David Thomas, de bron
@DavidThomas; Ik schreef het fout sorry, het is niet hetzelfde als mijn live script. @ScruffyTheJanitor; Niets veranderd :(
toegevoegd de auteur Revenant, de bron
Wauw, dat was raar. Ik moest setTimeout gebruiken. Niet alleen $ (document) .ready() omdat datatable tijd nodig heeft om te laden, nadat het geladen is, zijn er geen problemen.
toegevoegd de auteur Revenant, de bron
@DavidThomas; bedankt maar ik denk niet dat het zal lukken, want ik gebruik datatables met server-side-verwerking, wat betekent dat het daadwerkelijk wordt geladen nadat de pagina zelf laadt, daarom heb ik setTimeout nodig.
toegevoegd de auteur Revenant, de bron
In je eerste javascript-blok $ ('a [href = #' + hash + ']). Klik (); ontbreekt een aanhalingsteken. En u gebruikt dezelfde aanhalingstekens. Probeer de ' in een " te veranderen voor uw selector.
toegevoegd de auteur Scruffy The Janitor, de bron

1 antwoord

Om de een of andere reden vind ik een oplossing of een manier om mijn probleem te melden op SOF . Deze vraag is weer net als anderen en mijn 'oh, c'omon nu' reactie lijkt de laatste tijd in een lus te zitten.

Ik gebruik datatables met server-side processing. Dat betekent dat gegevens worden geladen nadat de pagina zelf is geladen. Daarom heeft $ (document) .ready (); om de een of andere reden niet het verwachte resultaat opgeleverd en moest ik extra tijd toevoegen voordat het zou doen wat ik wilde;

setTimeout(function() {
    var hash = window.location.hash;
    if (hash == '') hash = 'add';
    hash = hash.replace('#', '');
    $("a[href=#"+hash+"]").click();
}, 1000);

Heb de truc gedaan. @David Thomas en @Sruffy De conciërge bedankt voor uw tijd en bezorgdheid.

1
toegevoegd