2015-09-07 20 views
10

Ho una casella di controllo su un modulo che è deselezionato per impostazione predefinita come al solito. ora voglio eseguire due azioni separate sullo stato selezionato e deselezionato di questa casella di controllo.eseguire un'azione sulla casella di controllo selezionata o evento non selezionato sul modulo HTML

questa è la mia casella di controllo:

<form> 
    syn<input type="checkbox" name="checkfield" id="g01-01" onchange="doalert(this.id)"/> 
</form> 

e questo è il mio script:

function doalert(id){ 
    if(this.checked) { 
    alert('checked'); 
    }else{ 
    alert('unchecked'); 
    } 
} 

avverte solo uncheched !! qual è il modo migliore per farlo.

+0

che cosa è questo nella tua funzione? – Popnoodles

risposta

23

Possiamo farlo utilizzando JavaScript, senza bisogno di jQuery. Basta passare l'elemento modificato e lasciare che sia JavaScript a gestirlo.

HTML

<form id="myform"> 
    syn<input type="checkbox" name="checkfield" id="g01-01" onchange="doalert(this)"/> 
</form> 

JS

function doalert(checkboxElem) { 
    if (checkboxElem.checked) { 
    alert ("hi"); 
    } else { 
    alert ("bye"); 
    } 
} 

Demo Here

+0

Una buona risposta dovrebbe spiegare perché l'OP ha il suo problema e perché la soluzione lo risolve. – RobG

+0

l'unica vera risposta era questa, visto che devo usare lo stesso ID per diversi elementi nel modulo. thnaks – shekoufeh

+3

@shekoufeh Mentre questa è una grande risposta che risolve il tuo problema, dovrebbe anche essere noto che tutte le altre risposte sono anche vere perché non puoi usare lo stesso 'id' più volte in un documento. Se è necessario, dovresti cambiarlo in una classe. –

1
<form> 
    syn<input type="checkbox" name="checkfield" id="g01-01" /> 
</form> 

js:

$('#g01-01').on('change',function(){ 
    var _val = $(this).is(':checked') ? 'checked' : 'unchecked'; 
    alert(_val); 
}); 
+0

Le risposte al solo codice non sono piaciute, specialmente quando richiedono una libreria non contrassegnata o menzionata nell'OP e non spiegano il problema o perché la tua risposta risolve esso. – RobG

1

Hai provato a utilizzare l'evento di modifica JQuery?

$("#g01-01").change(function() { 
    if(this.checked) { 
     //Do stuff 
    } 
}); 

Poi si può anche rimuovere onchange="doalert(this.id)" dalla tua casella :)

Edit:

Non so se si utilizza JQuery, ma se non sei ancora usarlo , è necessario inserire il seguente script nella vostra pagina in modo da poter utilizzare:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
+0

jQuery non ha un evento di modifica. – RobG

+3

@RobG http://www.w3schools.com/jquery/event_change.asp –

+0

Ho ripetuto più volte questo ID nel modulo per un altro scopo, quindi non posso gestirlo in questo modo. – shekoufeh

0

Se il debug il tuo codice utilizzando gli strumenti di sviluppo, noterai che this si riferisce all'oggetto finestra e non al controllo di input. Prendi in considerazione l'utilizzo dell'ID passato per recuperare l'input e controlla il valore checked.

function doalert(id){ 
    if(document.getElementById(id).checked) { 
    alert('checked'); 
    }else{ 
    alert('unchecked'); 
    } 
} 
+1

Ti preghiamo di considerare la modifica del tuo post per aggiungere ulteriori spiegazioni su cosa fa il tuo codice e perché risolverà il problema. Una risposta che per lo più contiene solo codice (anche se funziona) di solito non aiuta l'OP a capire il loro problema. – Reeno

2

Il problema è come hai attaccato l'ascoltatore:

<input type="checkbox" ... onchange="doalert(this.id)"> 

ascoltatori in linea sono effettivamente avvolti in una funzione che si chiama con l'elemento come questo. Quella funzione chiama quindi la funzione doalert, ma non imposta il suo questo in modo che per impostazione predefinita l'oggetto globale (finestra in un browser).

Poiché l'oggetto finestra non ha una proprietà controllata, this.checked viene risolto sempre come falso.

Se volete questo entro doalert ad essere l'elemento, collegare l'ascoltatore con addEventListener:

window.onload = function() { 
    var input = document.querySelector('#g01-01'); 
    if (input) { 
    input.addEventListener('change', doalert, false); 
    } 
} 

Oppure, se si desidera utilizzare un listener in linea:

<input type="checkbox" ... onchange="doalert.call(this, this.id)"> 
Problemi correlati