2009-09-19 9 views
11

ho il seguente codice HTML:jQuery: selezionare casella di controllo in base al nome e il valore

<form id="test"> 
    <input type="radio" value="A" name="C1"/> 
    <a href="javascript:selectCheckbox('C1', 'A');"> OPTION-A </a> 

    <input type="radio" value="B" name="C1"/> 
    <a href="javascript:selectCheckbox('C1', 'B');"> OPTION-B </a> 

<input type="radio" value="C" name="C1"/> 
    <a href="javascript:selectCheckbox('C1', 'C');"> OPTION-C </a> 

    // several other: C2, C3, .. 
</form> 

E sto cercando di attuare selectCheckbox(chkbox, value), che dovrebbe:

  1. ricerca di tutte le radio di con name = chkbox e set attr('checked') = false
  2. di ricerca per la radio avere name = chkbox AND val() = value e impostare attr('checked') = true

io non riesco a capire, ciò che il selettore di destra è, ho provato quanto segue senza alcuna fortuna:

var name = "#" + chkbox + " :checked"; 
$(name).each(.. // doesn't work 

$('#'+chkbox).each(.. // if finds only the first occurence 
         // of i.e. C1, although I would expect 3 

$("input[@name='"+chkbox+"']").each(function() { .. 
// leaves me with the following error: 
// Warning: Expected attribute name or namespace but found '@name' 

prega fatemi sapere cosa sto facendo male. Molte molte grazie!

+0

non dovreste avere più elementi con lo stesso ID ("C1") – Zed

+0

Hai ragione, ho tolto l'ID è ora. Grazie! – MrG

+2

"Nota: In jQuery 1.3 [@attr] i selettori di stile sono stati rimossi (erano precedentemente deprecati in jQuery 1.2).Basta rimuovere il simbolo '@' dai selettori per farli funzionare di nuovo. " – Zed

risposta

4

Vorrei usare la posizione DOM relativa per fare la navigazione. Si noti inoltre che non è possibile avere elementi diversi con lo stesso id, ma in questo caso non è necessario poiché è possibile utilizzare il selettore degli attributi sul nome per trovare gli input corretti. Si noti che è già noto quale dei vari input deve essere controllato in base alla posizione del collegamento su cui si fa clic. Preferisco che il codice sia separato dal markup, quindi ho dato ai collegamenti una classe per renderli facili da selezionare e spostare l'applicazione di gestione dei clic nel codice.

Aggiornamento: Si noti che ho rimosso il codice per deselezionare le altre radio. Con le radio, impostarne una su selezionata dovrebbe deselezionare automaticamente le altre.

$(function() { 
    $('a.checkbox-selector').click(function() { 
     // get the checkbox immediately preceding the link -- this should 
     // be checked. Checking it should automatically uncheck any other 
     // that may be checked. 
     $(this).prev(':checkbox'); 
       .attr('checked',true); 
     return false; // don't process the link 
    }); 
}); 

<form id="test"> 
    <input type="radio" value="A" name="C1"/> 
    <a href="#" class="checkbox-selector"> OPTION-A </a> 

    <input type="radio" value="B" name="C1"/> 
    <a href="#" class="checkbox-selector"> OPTION-B </a> 

    <input type="radio" value="C" name="C1"/> 
    <a href="#" class="checkbox-selector"> OPTION-C </a> 

    <!-- several other: C2, C3, ... --> 
</form> 
0

Prova $("input[name='C1'] :checked]"). Gli ID dovrebbero essere unici, quindi jquery probabilmente non prevede di restituire più di un elemento.

1

Non è possibile avere più elementi con lo stesso ID su una pagina. Tutti i tuoi elementi di input hanno l'id "C1".

+1

È possibile, ma è una cosa brutta da fare per alcuni motivi. Provalo e nota che la differenza tra $ (" # id ") e $ ("[id = id]). Quest'ultimo restituirà un insieme avvolto di molti elementi che condividono l'id "id", mentre il primo restituisce un set avvolto contenente solo il primo elemento dichiarato con questo id. –

7

Grazie per il vostro aiuto, ho finalmente capito:

function selectTestAnswer(chkbox, value) { 
    $("[name="+chkbox+"]").each(function() { 
     if ($(this).val() == value) 
      $(this).attr('checked', true); 
     else 
      if ($(this).attr('checked') == true) 
       $(this).attr('checked', false); 
}); 

}

+0

Penso che sia più codice di quello che ti serve. – tvanfosson

22

Prova questo:

$('input:radio[name="' + chkboxName + '"][value="' + value + '"]') 
    .attr('checked', 'checked'); 
5

È possibile utilizzare prop() al posto di attr() se la tua versione jquery> 1.6

Fare riferimento questo link http://api.jquery.com/prop/

Come di jQuery 1.6, il metodo .prop() fornisce un modo per esplicitamente recuperare i valori di proprietà, mentre .attr() recupera gli attributi.

Così il codice che state cercando per un look più simile a

$('input:checkbox[name="Validators"][value="' + v + '"]').prop('checked',true); 
Problemi correlati