Focus neu setzen nach aktiviertem Element

Funj0y

Mitglied
Hallo,

Wie dem Titel zu entnehmen versuche ich irgendwie den Focus neu zu setzen sobald ich ein A- Element geklickt habe. Es ist zwar nur ein Schönheitsfehler jedoch stört er mich irgendwie ^^

Hier mal ein Screen zur Veranschaulichung wie es aussieht wenn der Focus nicht neu gesetzt wurde.

Navi.jpg

Nun suche ich nach einer optimalen Lösung wenn es die gibt?!

Normaler weise geh ich immer so vor, da ich nun kein wirklicher Javascript Programmierer bin (meine Stärken liegen eher in PHP) suche ich via Google nach möglichen Methoden-Namen wie z.B. Focus oder View. Bei Focus werde ich natürlich auf die Methode focus() verwiesen, die jedoch eher für Form- Elemente gedacht ist. Bei View bekomme ich nur Methoden genannt wo ich mir Werte wie die X/Y-Achse zurückgeben lassen kann, was mir hier auch nicht hilft. Da ich nun mit mein Latein am Ende bin wende ich mich an euch :)

Nun erstmal zu meiner AJAX Funktion ^^

Ich habe mir mittels dem Prototype Framework eine kleine AJAX Funktion geschrieben die mir anhang der Navigation die Daten asynchron an meine Sidebar schickt, und dann natürlich den benutzten Link in der Navigation hervorhebt. Das funktioniert auch alles einwandfrei!

Hier meine AJAX Funktion:
Javascript:
// Observe all events... 
Event.observe(window, 'load', init, false);

/**
 * Located the start selector id
 *
 * @var string
 */
var linkStartId;

/**
 * Initialized all methods
 */
function init() {      
    navigation();  
}

/**
 * Observe all events in the navigation
 */
function navigation() {
    // Array with all A- element's in the
    // DIV- element with the id 'navigation'
    var naviElement = $('navigation').select('a');
    
    // Search the class 'HoverActivated' and set it to the start id     
    naviElement.each(function (name) {
        if($(name.readAttribute('id')).hasClassName('HoverActivated')) {
            linkStartId = name.readAttribute('id');
        }
    });
    
    // Observe all events by a click of the A- element
    naviElement.each(function (name) {
        Event.observe(name.readAttribute('id'), 'click', sidebar, false);
    });
}

/**
 * Require the request in the sidebar
 */
function sidebar(objectEvent) {
    var id = $(Event.element(objectEvent)).readAttribute('id');
    var send = false;
    
    // Check if a request need via AJAX  
    if($(id).hasClassName('HoverActivated') == false) {
        send = true;
    } 
    
    // Remove the class name from the old link
    $(linkStartId).removeClassName('HoverActivated');
    linkStartId = id;

    // If will the link used, then add the class name
    $(id).addClassName('HoverActivated');
    
    // Have the query a sidebar then request via AJAX the sidebar
    if(id.indexOf('-SB') > 0 && send == true) {        
        var url = 'index.php';
        var pars = 'page=sidebar&file='+id;
        var target = 'sidebarMenu';
        var myAjax = new Ajax.Updater(target, url, {method: 'get', parameters: pars});  
    } 
}

Hier die HTML Datei dazu:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
<head>
    <title>SV Bau-Union e.V. - Abteilung Tischtennis</title>
    <meta http-equiv="Content-type" content="text/html; CHARSET=iso-8859-1" />
    <link rel="stylesheet" type="text/css" href="src/style/svbu-2010/css/design.css" media="screen" />   
    <script type="text/javascript" src="src/js/prototype.js"></script>
    <script type="text/javascript" src="src/js/sidebar.js"></script>
</head>
<body>
<div id="wrap" class="FullHeigh">
    <div id="header"></div>
    <!-- ////////// Navigation -->
    <div id="navigation">
         <ul>
            <li><a id="idImpressum" href="#">Impressum</a></li>
            <li><a id="idSection" href="#">Abteilungen</a></li>
            <li><a id="idContact" href="#">Kontakt</a></li>
            <li><a id="idTeams-SB"  href="#">Mannschaften</a></li>
            <li><a id="idHomepage" href="index.php?page=index" class="HoverActivated">Startseite</a></li>
         </ul>
    </div>
    <!-- ////////// Sidebar -->
    <div id="sidebar" class="FloatLeft">
        <p id="logoIds">
            <a href="http://www.integration-durch-sport.de">
                <img src="src/img/logoIds.jpg" height="47" width="93" alt="Integration durch Sport" title="Integration durch Sport" />
            </a>
        </p>            
        <div id="sidebarMenu">
            ....
        </div>            
    </div> 
    <!-- ////////// Content --> 
    <div id="content" class="FloatLeft">
        ...
    </div>      
</div>       
</body>
</html>

Bin für jede Hilfe dankbar :)

Gruß Funj0y
 
Aus deinem Post werde ich nicht ganz schlau. Du möchtest doch eher den Focus vom Element entfernen (dich stört der Rahmen, den der Browser drumsetzt?), anstatt ihn neu zu setzen? Oder meinst du das damit?

Dazu gibt es die Funktion "blur()" als gegenstück zu "focus()"
HTML:
<a href="#" onfocus="this.blur()">Klick!</a>
 
Hallo,

Jepp mich stört nur der rahmen :)

Ich Probier das mal mit blur() danke :)

@Maik:
Hmm gibt es da die Möglichkeit es nur zu unterbinden wenn A- geklickt wurde aber das mittels TAB- weiterhin durchgehen immer noch funktioniert?

Gruß Funj0y
 
Zuletzt bearbeitet:
Hi,

wenn CPoly dein Anliegen richtig verstanden hat, kannst du zumindest für die Gecko-Browser dieses CSS nutzen:

CSS:
a { outline:none; }

Es sei hier aber darauf hingewiesen, dass der Fokus ein wichtiges Steuerelement darstellt, wenn der Nutzer das Dokument (Navigationsmenü, Verweise, Formular-Elemente) mit der Tabulator-Taste "durchtabbt", um ihm die aktuelle Position anzuzeigen. Fehlt dieser, geht ihm die Orientierung verloren, wo er sich gerade im Dokument befindet.

mfg Maik
 
@Maik:
Hmm gibt es da die Möglichkeit es nur zu unterbinden wenn A- geklickt wurde aber das mittels TAB- weiterhin durchgehen immer noch funktioniert?
Mit dem Deaktivieren des Fokus' bekommt der Nutzer nicht mehr angezeigt, welches Element er aktuell angesteuert hat.

mfg Maik
 
Nagut dann muß ich mit den Schönheitsfehler leben ;)

Gruß Funj0y
 
Zuletzt bearbeitet:
Anstatt onfocus kannst du onclick nehmen. Dann verschwindet der Rahmen aber erst, nach dem du die Maus loslässt. Mit onmousedown funktioniert es leider nicht, weil erst nach dem onmousedown-Event das Element den Focus erhält.
 
Zurück