• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Von Klick zu Klick langsamer (JQuery)

Spoiler

Mitglied
Servus,

ich habe ein merkwürdiges Phänomen mit JQuery.

Wenn ich Daten per Ajax nachlade, funktioniert das wunderbar, auch die enthaltenen Links reagieren auf ein OnKlick.
Aber: Wenn ich den Teil mehrmals lade, fangen die Links (Hover: underline) an zu flackern und das Laden der Daten dauert immer länger.

Kennt jemand das Verhalten oder kann mir sagen, was ich hier "falsch" mache?

Hier mal der Code:

Lädt die Seite:

Code:
[SIZE=2][SIZE=2]<[/SIZE][/SIZE][SIZE=2][SIZE=2]a [/SIZE][/SIZE][SIZE=2][SIZE=2]href[/SIZE][/SIZE][SIZE=2][SIZE=2]="#" [/SIZE][/SIZE][SIZE=2][SIZE=2]data-do[/SIZE][/SIZE][SIZE=2][SIZE=2]="adm" [/SIZE][/SIZE][SIZE=2][SIZE=2]class[/SIZE][/SIZE][SIZE=2][SIZE=2]="MainFrame"><[/SIZE][/SIZE][SIZE=2][SIZE=2]img [/SIZE][/SIZE][SIZE=2][SIZE=2]src[/SIZE][/SIZE][SIZE=2][SIZE=2]="./images/admin.png" [/SIZE][/SIZE][SIZE=2][SIZE=2]border[/SIZE][/SIZE][SIZE=2][SIZE=2]="0" [/SIZE][/SIZE][SIZE=2][SIZE=2]title[/SIZE][/SIZE][SIZE=2][SIZE=2]="Administration" [/SIZE][/SIZE][SIZE=2][SIZE=2]alt[/SIZE][/SIZE][SIZE=2][SIZE=2]="Administration"[/SIZE][/SIZE][SIZE=2][SIZE=2]/></[/SIZE][/SIZE][SIZE=2][SIZE=2]a[/SIZE][/SIZE][SIZE=2][SIZE=2]>[/SIZE][/SIZE]


Code:
$(document).ready(function()
{
$('a.MainFrame').click(function(){LinkGetRequest($(this).attr('data-do')); return false;});
...

SeitenInhalt:

Code:
  <table class="tborder" align="center" width="100%" cellspacing="0" cellpadding="0">
    <tr>
      <td width="100%" align="left" class="alt1">
        <ul>
          <li><a href="#" data-do="adm/tmpl">Templates verwalten</a></li>
          <li><a href="#" data-do="adm/css">CSS verwalten</a></li>
          <li><a href="#" data-do="adm/style">Style verwalten</a></li>
          <li><a href="#" data-do="adm/config">Config verwalten</a></li>
          <li><a href="#" data-do="adm/phrase">Phrasen verwalten</a></li><br />
          <li><a href="#" data-do="adm/tbl">Tabellen verwalten</a></li>
        <ul>
      </td>
    </tr>
  </table>
  <script type="text/javascript">
    $('a').click(function(){LinkGetRequest($(this).attr('data-do')); return false;});
  </script>

und

Code:
function LinkGetRequest(Do)
{
  clearTimeout(AjaxRedirTimeout);
  
  $.ajax(
  {
    type:     'POST',
    url:      'index.php?AJAX=AJAX&Do=' + encodeURIComponent(Do),
    success:  function(data)
              {
                ajax = eval('(' + data + ')');
                if(ajax!=false)
                {
                  HandleReturn(ajax);
                }
              }
  });
}


Danke im Voraus

Gruß

Spoiler
 
Werbung:
Hab noch was vergessen ... hier noch die Function "HandleRetunr":

Code:
function HandleReturn(ReturnCode)
{
                        $('#Content').html(ReturnCode.HTML);
                        // PageSelector prüfen und laden
                        $('#PageSelector').html((ReturnCode.PAGE_SELECTOR != '') ? ReturnCode.PAGE_SELECTOR : '');
                        
                        // PageFilter prüfen und laden
                        $('#PageFilter').html((ReturnCode.PAGE_FILTER != '') ? ReturnCode.PAGE_FILTER : '');
}
 
Ich sehe hier schonmal zwei verschiedene Event-Handler für dasselbe Event.

"$('a.MainFrame').click(function(){LinkGetRequest($(this).attr('data-do')); return false;});"
ist ja das Gleiche wie
$('a').click(function(){LinkGetRequest($(this).attr('data-do')); return false;});

Also wird das Click-Event zweimal ausgeführt.

Ich nehme an, du hast noch andere derartige Dinge; am besten du gibst mal 'nen Link zur Seite und loggst, wie oft die Seite aufgerufen wird, denn ich glaube, du legst bei jedem Klick einen weiteren Event-Handler oben drauf, was nach 10 oder 20 wohl in der Tat langsam werden kann.
 
Werbung:
Hallo,

die Idee war gut ;)
Ich habe alle Event-Handler mal umgestellt, sodaß sie nun bestimmten Events zugewiesen sind (und nicht mehr doppelt) und seit dem tritt das Phänomen nicht mehr auf.

Einen Link könnte ich leider nicht geben, da es sich um Intranet handelt und somit nicht von "außen" verfügbar ist.

DANKE!
 
Zurück
Oben