Ich habe Anker-Tags mit href
nur ein Fragment enthält. Ich habe einen Click-Handler zugewiesen. Wenn ich auf den Link klickte, nachdem der Handler fertig war, lädt die Seite die Seite, die eine Stufe höher ist.Warum zeigt Anker href vollständigen Pfad für Fragment an?
Hier sind die Fakten:
- Die Seite bei
http://domain.com/app/path_component
wird - Die Seite definiert
<base href="http://domain.com/app/">
- Seite enthält:
<a href="#fragment">
...</a>
- jQuery setzt einen Click-Handler:
$('a').on('click', handler)
.htaccess
leitet Server Umgang mit der PHP-Anwendung auf dem Server .../app
ich zurückkehrte, nicht falsch, noch ruft e.stopPropagation() oder e.preventDefault(), so verstehe ich, dass der Browser seine Standard etwas tun würde und die href zu behandeln. Was ich nicht verstehe ist, warum es eine andere Seite geladen hat?
durch meine Handler In Tracing, sah ich, dass this.href ist "http://domain.com/app/#fragment". Das würde erklären, warum die Eltern das Laden der Seite ist, aber ich verstehe nicht, warum es diese Seite war und nicht http://domain.com/app/path_component#fragment „?
Die einzige Art, wie ich die ursprüngliche href sehen konnte, war direkt das href Attribut zu überprüfen. Ich wollte der Seite zu laden lassen, wenn es notwendig sein sollte, aber es verhindern, wenn es nur ein Fragment ist, so schrieb ich Rückkehr der Handler als:
return $(this).attr('href')[0] != '#';
Warum wurde dies notwendig ich dachte, die Standardeinstellung für ein Fragment der Handhabung ist nicht zurück an den Server zu gehen.
Ich habe zum Zweck Sie beschreiben, aber ich habe es nicht Stand-alone-Fragmente beeinflussen würde, da sie in der Regel nicht einmal einen Anruf zurück an den Server auslösen. Ich muss mein Verständnis davon neu definieren. –
wrlee