2011-02-09 11 views
7
<input class="jProblemClass" id="Checkbox{%= ID %}" type="checkbox" onchange="problemPicker.onChangeProblemCheckBox('{%=ID %}');"/> 

Dopo il primo controllo o deseleziona non accade nulla. Dopo un secondo clic, chiama la mia funzione problemPicker.onChangeProblemCheckBox, ma ottengo il primo controllo dell'ID. Perché? Può aiutarmi qualcuno?Html checkBox onchange non funzionante

onChangeProblemCheckBox: function(id) { 
    if ($('#CheckBox' + id).attr("checked") == true) { 
     problemPicker.addToCheckProblems(id); 

     var checkboxes = $('.jProblemClass:checked'); 

     if ((checkboxes.length > general.limit) && (general.limit != 0)) { 
      alert('The limit of ' + general.limit + ' problems exceeded. Please deselect ' + (checkboxes.length - general.limit).toString() + '.'); 
     } 
    } else { 
     problemPicker.delFromCheckProblems(id); 
    } 
}, 
+1

Si potrebbe desiderare di mostrarci cosa fa la funzione - forse il problema è lì ... – Rob

risposta

19

Bro utilizzare evento onclick invece onchange .. motivo ... Secondo i riferimenti Javascript che ho letto, OnChange incendi dopo la messa a fuoco è perduto. A meno che non clicchi altrove, l'attenzione non è persa in IE. Gli altri browser non devono attendere che lo stato attivo vada perso prima che attivi onchange - il che suggerisce che non stanno seguendo le specifiche correttamente (nonostante abbia più senso sparare a quel punto). Che ne dici di usare onclick e onkeydown/onkeyup (usando sia onclick che onkeyup/onkeydown si coprono le impostazioni del mouse e della tastiera della casella di controllo ). RIFERIMENTO: http://www.winvistatips.com/re-onchange-event-checkbox-not-working-properly-t311364.html

0

Penso che il problema passi da qui: $('#CheckBox' + id).attr("checked") == true. In base alle specifiche HTML, checked deve essere impostato su "checked" quando viene generato questo evento. Quindi, prova a utilizzare qualcosa come $('#CheckBox' + id).attr("checked") == "checked" o anche $('#CheckBox' + id).attr("checked").

Come seconda opzione, ti consiglio di utilizzare jquery puro per eseguire la tua routine. Ad esempio, se si dispone di <input type="checkbox" id="ac"> casella di controllo, è possibile utilizzare questo codice JQ per gestire le routine:

$(document).ready(function() { 
    $("input[type=checkbox]").change(function() { 
     alert("Am i checked? - " + $(this).attr("checked") + "\nMy ID:" + $(this).attr("id")); 
    }); 
}); 

Questo caso è mostrato nella this demo.

+0

Dopo aver cambiato l'evento 'onchange' su' onclick' tutto funziona. Ma se uso onchange niente funziona. – isxaker

+0

Quindi potrebbe accadere che onchange non funzioni finché non si attiva onblur, prova a impostare lo stato attivo su un altro elemento dopo aver controllato la casella. –

+0

Ora provo a farlo. – isxaker

0

Provare a utilizzare if($('#CheckBox' + id + ':checked').length > 0) invece, in questo modo è possibile che jQuery indichi che la casella di controllo è checked oppure no.

Anche se il onChangeProblemCheckBox utilizza alcuna proprietà interne in problemPicker ma non li Referens con percorso completo, cioè problemPicker.nnnnn fallirà come l'evento verrà generato nel contesto dell'elemento, non problemPicker. Sarebbe come se la funzione fosse chiamata in questo modo $('#CheckBox' + id).onChangeProblemCheckBox().