2012-09-06 23 views
5

Così, in breve, ho una serie di .liPassando un parametro di funzione javascript tramite selettore CSS

<ul> 
    <li class="lmit_1"><a href="#" >Home</a></li> 
    <li class="lmit_2"><a href="#">About us</a></li> 
    <li class="lmit_3"><a href="#">Who we are</a></li> 
    <li class="lmit_4"><a href="#">Whats new</a></li> 
    <li class="lmit_5"><a href="#">Contact Us</a></li>  
</ul> 

e il mio javascript (jQuery)

<script> 
    $(".lmit_" + id).click(function() { 
    alert(id); 
    }); 
</script> 

Quello che sto cercando di fare viene ricevuto qualunque numero sia alla fine della classe css come parametro (.lmit_3 per esempio consentirebbe id = 3) e quindi alert (id) dovrebbe portare a un popup con il numero 3? Sono nuovo di programmazione sia e javascript quindi le mie scuse se la risposta mi sta fissando in faccia ...

+0

Perché non si può dare a tutti una classe comune e rendere il 'lmit_n' an' id'? Non ha molto senso avere classi uniche. – Blender

+0

@Blender: O meglio, usa un attributo dati per trasportare i dati, um. –

risposta

4

Demo: http://jsfiddle.net/sFwZj/1/

$('li').click(function() { 
    alert($(this).attr('class').split('_')[1]); 
}); 

Nel codice si utilizza variabile non dichiarata chiamato id, quindi dovrebbe lanciare l'errore ReferenceError: id is not defined, quando si prova ".lmit_" + id.

e anche io che si dovrebbe usare id non class per questo, anche come è stato detto, probabilmente sarà meglio se si vuole memorizzare il numero in qualcosa come attributo data-id, allora si può ottenere da $(this).data('id').

+0

'$ (". Lmit_ "+ id)'? – timidboy

+0

Ho provato il codice Questo ha funzionato, ma non ".lmit_" + id – Melbourne2991

+0

funziona, grazie cumuli! Per curiosità, cosa stava cercando di fare il mio codice? o era completamente fuori dal marchio? – Melbourne2991

1
$("li").click(function() { 
  alert(this.className.split('_')[1]); 
}); 

dovrebbe farlo

Ma perché non

    <ul> 
    <li class="lmit" id="lmit_1"><a href="#" >Home</a></li> 
    <li class="lmit" id="lmit_2><a href="#">About us</a></li> 

con

$(".lmit").click(function() { 
  alert(this.id.split('_')[1]); 
}) 
0

provare questo

$('ul li').on('click', function(){ 
    alert($(this).prop('class').split('_')[1]); 
}); 
+0

@ user1650757 il codice funziona? – Codegiant

1

Probabilmente è meglio memorizzare tutti i dati che si desidera utilizzare nell'attributo dei dati. In questo modo non stai facendo affidamento su classi e ID troppo pesantemente (e sull'elaborazione delle stringhe) e hai una certa separazione tra la formattazione e la funzionalità.

il codice HTML sarà simile a questa:

<ul> 
<li class="lmit" data-myattr="1"><a href="#" >Home</a></li> 
<li class="lmit" data-myattr="2"><a href="#">About us</a></li> 
</ul> 

nota che i dati-myattr può essere chiamato qualsiasi cosa con un prefisso "data-".

per accedere ai dati

 $(".lmit").click(function(){ 
//you can access it as an attribute 
     alert($(this).attr("data-myattr")); 
//or you can access it as data 
      alert($(this).data("myattr")); 
     }) 

o anche più senza classi soluzione Uso delegazione evento

$("ul").delegate("li", "click", function() { 
alert($(this).data("myattr")); 
}); 

quindi non c'è bisogno di classe LMIT a tutti nel tuo html

<ul> 
<li data-myattr="1"><a href="#" >Home</a></li> 
<li data-myattr="2"><a href="#">About us</a></li> 
</ul> 
0

Le risposte sopra sono tutte corrette. Se si desidera prendere il numero dell'articolo nel <ul>, si dispone di un'alternativa.

$('li').click(function() { 
    alert($(this).index()+1); 
}); 

Il vantaggio è che non sarà necessario generare i nomi di classe (se questo è tutto quello che sono usati per)

0
$('[li][class^="lmit_"]').click(function() { 
    alert($(this).attr('class').split('_')[1]); 
}); 

se si utilizza $ ('Li') se u fare clic su qualsiasi li non ha la classe "limit_" anche verrà licenziato.

Problemi correlati