2012-10-16 18 views
13

Ho il seguente codice html. Facendo clic sull'etichetta, attiva la casella di controllo.etichetta di arresto dalla casella di controllo di input

<td><label for="startClientFromWebEnabled">Client Launch From Web:</label></td> 
<td><input type="checkbox" id="startClientFromWebEnabled" name="startClientFromWebEnabled" data-bind="checked: StartClientFromWebEnabled, enable: IsEditable" onchange="startClientFromWebToggleRequiredAttribute()" /></td> 

Come posso evitare questo? Se rimuovo il for="startClientFromWebEnabled", smette di commutazione, ma ho bisogno di questo perché ho un po 'di logica che prende l'id dall'elemento che genera l'evento ...

+0

Posso riformattare il codice HTML per una migliore leggibilità? Inoltre, si prega di ricontrollare il codice. Non sono sicuro che dovrebbe contenere qualcosa come 'ty'enter code here'pe =" checkbox'. – jsalonen

+1

Rimuovi l'attributo 'for' ma lascia un' id'. – dfsq

+0

@dfsq ha già dichiarato che non può farlo – BenM

risposta

16

la soluzione migliore sarebbe quella di lasciare etichetta alternare la casella di controllo come quello è il comportamento intuitivo e previsto.

La soluzione secondo migliore è quella di assicurarsi che la casella di controllo non sia nidificata all'interno dell'etichetta e che l'etichetta non abbia l'attributo for. Se si dispone di una logica che dipende da esso, è possibile inserire gli attributi dei dati sugli elementi e utilizzarli nella logica.

<input type="checkbox" data-myid="1" /> 
 
<label data-myid="1">foo</label>

Last resort

Si potrebbe evitare che il comportamento predefinito dell'evento click utilizzando jQuery:

$('label[for="startClientFromWebEnabled"]').click(function(e) { 
    e.preventDefault(); 
});​ 

consulta questo jsFiddle per un esempio.

0

se si utilizza JQuery, aggiungere un id sull'etichetta allora aggiungere questo nello script:

$("#lbl").click(function(){ 
    return false; 
}); 
+2

È meglio intercettare l'evento e impedire l'azione predefinita, in quanto è tutto ciò che * dobbiamo * fare qui. 'Return false' fa molto di più, e potrebbe causare risultati imprevisti altrove, in particolare con la propagazione – BenM

+1

Inoltre, non è necessario aggiungi un ID all'etichetta (vedi la mia risposta per il selettore) – BenM

+0

Sono anche un noob in jquery, quindi sto solo dando una risposta a ciò che @Mdb sta cercando. –

0

"Ho un po 'la logica che prende l'id dall'elemento"

Si potrebbe rimuovere il for -attribute, se si memorizza l'ID da qualche altra parte. Ad esempio in un data-* -attribute:

<label data-input-id="startClientFromWebEnabled"> 

D'altra parte, a volte è difficile da puntare e fare clic su una di una casella di controllo basato sullo stile e le capacità degli utenti. Esistono buoni motivi per utilizzare l'attributo for.

0

C'è soluzione CSS troppo:

label { 
    pointer-events: none; 
    cursor: default; 
} 
Problemi correlati