2013-03-29 11 views
5

Ho un menu laterale che se cliccato scivoli fuori per rivelare un pannello di contenuti. In base alla voce di menu cliccata, ovviamente ho bisogno di cose diverse da popolare nel pannello.funzione di jQuery (evento) event.target.id è vuota quando si fa clic legata testo

ho scritto una funzione per utilizzare il menu/del pannello e funziona parzialmente. Tuttavia, sto cercando di determinare cosa caricare in base a event.target.id (poiché la funzione impiega event) ma ha solo un valore quando faccio clic molto vicino ai bordi del quadrato collegato. Quando clicco vicino al testo vero e proprio, che sono h1 e h6 e non hanno id 's non funziona.

Demo online (clicca vicino ai bordi della piazza 'Stili' e poi al centro): http://jsfiddle.net/mANuD/

<div id="application-frame"> 
    <div class="panel"></div> 
    <ul id="slide-out-menu"> 
    <li> 
     <a href="#" class="item" id="styles-menu"> 
     <h1>S</h1> 
     <h6>Styles</h6> 
     </a> 
    </li> 
    <li> 
     <a href="#" class="item" id="designers-menu"> 
     <h1>D</h1> 
     <h6>Designers</h6> 
     </a> 
    </li> 
    <li> 
     <a href="#" class="item" id="code-menu"> 
     <h1>C</h1> 
     <h6>Code</h6> 
     </a> 
    </li> 
    <li> 
     <a href="#" class="item" id="help-menu"> 
     <h1>?</h1> 
     <h6>Help</h6> 
     </a> 
    </li> 
    </ul> 
</div> 

Come posso risolvere il problema/migliorare questo in modo che non importa in quale parte del collegato area clicco?

+1

Includere sempre il markup e il codice rilevanti ** nella domanda stessa **, non solo collegare (nemmeno a jsfiddle, anche se questo è un bel vantaggio). Perché: http://meta.stackexchange.com/questions/118392/add-stack-overfow-faq-entry-or-similar-for-putting-code-in-the-question –

+2

cambia semplicemente 'e.target.id 'per' this.id' per lavorare con l'ID dell'elemento associato e non con l'obiettivo. – adeneo

risposta

12

Change event.target.id-event.currentTarget.id o this.id.

Il event.target è sempre l'elemento più profondo cliccato, mentre event.currentTarget o this punterà all'elemento a cui il gestore è legato, o all'elemento che il selettore delegato abbinato.

3

Sembra che ci sia un bordo o una spaziatura su alcuni elementi discendenti, e quindi event.target è un discendente dell'elemento su cui il gestore è (effettivamente) collegato.

due opzioni:

  1. Usa this.id per ottenere il id dell'elemento gestore era (efficace) legato a. Questo di solito fa quello che vuoi. Updated Fiddle

  2. Non credo che ne avete bisogno in questa situazione, ma l'altro strumento utile nel toolkit per questo è closest, che trova il primo elemento corrispondente un selettore, cercando in l'elemento si dà, allora la sua genitore, quindi suo genitore, ecc. Quindi, ad esempio, $(this).closest(".item").attr("id") o $(event.target).closest(".item").attr("id") (poiché gli elementi desiderati hanno classe item). Updated Fiddle Ma ancora una volta, credo # 1 è quello che si vuole in questo caso.

Problemi correlati