2009-05-07 8 views
1

stoppe ich den folgenden Code haben:JQuery - Anker-Tag aus, klicken durch

//------------------------------------------------------// 
// When the document is ready, start firing our AJAX // 
//------------------------------------------------------// 
$(document).ready(function() { 
    $("#navIndex a").click(function() { 
     this.blur(); 
     return false; 
    }); 
    $("#navPrevNext a").click(function() { 
     this.blur(); 
     return false; 
    }); 

    // Bind actions... 
    $("#navIndex a").click(function(e) { e.preventDefault; updateNavigation($(this).attr('href')); }); 
    $("#navPrevNext a").click(function(e) { e.preventDefault; updateNavigation($(this).attr('href')); }); 
(); }); 
}); 

//--------------------------------------------------------------------------// 
// METHODS - Get the params from the page and execute a server side call // 
//--------------------------------------------------------------------------// 
function updateNavigation(pageIndex) { 
    var filters = $("form").serialize(); 
    var productGroup = $("#valProductGroup").attr('title'); 
    var productType = $("#valProductType").attr('title'); 
    var itemsPerPage = $("#ItemsPerPage").val(); 
    var menuString = $("#Navigation").html(); 

    // repopulate the paging menu... 
    $.ajax({ url: "/Catalog/Ajax/Update/Navigation" 
      , type: 'GET' 
      , dataType: 'HTML' 
      , data: { productGroup: productGroup, productType: productType, itemsPerPage: itemsPerPage, pageIndex: pageIndex, filters: filters } 
      , success: function(results) { $("#Navigation").html(results) } 
      , failure: function(results) { $("#Navigation").html(oldMenuString) } 
}); 

    // stop event bubbling... (this is not working as expected?) 
    return false; 
} 

Die Seite kann bei http://staging1.roomsalive.com/Catalog/Flooring/Hardwood finden. Die Seitennavigation (Erste/Vorherige/1/2/3/Nächste/Letzte) ist woran ich gerade arbeite. Wenn ich zum ersten Mal auf die Seite komme und auf "2" oder "3" klicke, verhält es sich so, wie ich es erwarte. Sobald das Menü aktualisiert ist, klicke ich dann auf eine der anderen realisierbaren Optionen, wie "3", und sendet es an http://staging1.roomsalive.com/Catalog/Flooring/Hardwood/3, anstatt den JQuery-Aufruf auszuführen. Ich bin mir zu 99% sicher, dass dies daran liegt, dass ich, wenn ich das Dokument lade, die JQuery click-Ereignisse an das Menü anschließe. Wenn es jedoch zurückgibt, sind diese Ereignisse verloren. Wie rette ich sie? Ist das das Problem?

TIA

Antwort

5

Ich kann mir zwei Gründe dafür vorstellen, vielleicht müssen beide gelöst werden. Wenn Sie beim Aktualisieren der Navigation die Elemente durch die angehängten Click-Handler ersetzen, müssen Sie entweder die Handler erneut anwenden oder die Live-Bindung verwenden, die den Handler automatisch an ein beliebiges aktuelles oder zukünftiges Element bindet, das mit dem Selektor übereinstimmt.

$("#navIndex a").live('click', function() { 
    this.blur(); 
    return false; 
}); 

Zweitens, während Sie in der Methode false zurückgeben, die die AJAX-Aufrufe, die Sie nicht diesen Wert wieder auf die Verbindungskette ausbreiten. Stellen Sie sicher, dass Ihre Klickfunktion das Ergebnis der updateNavigation-Methode zurückgibt. Oder gib einfach falsch zurück.

$("#navIndex a").live('click', function(e) { e.preventDefault; return updateNavigation($(this).attr('href')); }); 
+1

Fast funktioniert. Es gibt jetzt die gesamte URL statt nur den PageIndex an meinen AJAX-Anruf weiter. JQuery barfs das 2. Mal herum. Gibt es eine Möglichkeit zu überprüfen, was angehängt wird, nachdem die Seite aktualisiert wurde? –

+0

Sieh dir http://exceptioneer.com/Share/Summary.aspx?abf65e20-4903-4540-af9c-e57634f5ca8e an, um zu sehen, was beim 2. Mal passiert wird (nach dem ersten Ajax-Aufruf und der Neubesetzung der Navigationssteuerung). .. –

+0

Verwenden Sie Firefox mit dem Web Developer Plugin. Klicken Sie auf Quelle anzeigen und dann auf Generierte Quelle anzeigen, um nach dem Ajax-Aufruf die Seitenquelle anzuzeigen. – tvanfosson

0

Versuchen

$("#navIndex a").click(function(e) { 
    e.preventDefault(); 
    updateNavigation($(this).attr('href')); 
    return false; 
}); 
$("#navPrevNext a").click(function(e) { 
    e.preventDefault(); 
    updateNavigation($(this).attr('href')); 
    return false; 
}); 

// Bitte entfernen Sie diese Zeile - ich bin das Hinzufügen um das Minimum 6 Zeichen Regel zu bekommen.

0

Wenn die Seite zum ersten Mal geladen wird, werden die Ereignisse an die Elemente gebunden, aber wenn Sie diese Elemente löschen und durch ähnliche ersetzen ... sind das neue Elemente, für die keine Ereignisse gebunden sind.

Sie können die Erfolgs- und Fehlerfunktionen ändern, um die Funktionen an die neuen Elemente zu binden, nachdem das DOM durch den Aufruf $.html() geändert wurde.