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

Después de la primera comprobación o desmarque nada sucede. Afetr segundo clic, llame a mi función problemPicker.onChangeProblemCheckBox, pero obtengo la primera verificación de ID. ¿Por qué? ¿Puede ayudarme alguien?Html checkBox onchange no funciona

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

Es posible que desee mostrarnos lo que hace la función - tal vez el problema está ahí ... – Rob

Respuesta

19

Bro utilizar evento onclick lugar onchange .. Razón ... De acuerdo con las referencias de Javascript que he leído, onChange activa después de que el foco está perdido. A menos que haga clic en otro lugar, el enfoque no se pierde en IE. Los otros navegadores no deben esperar que se pierda el foco antes de disparar en el cambio, lo que sugiere que no están siguiendo las especificaciones correctamente (a pesar de que tiene más sentido disparar en ese punto). ¿Qué hay de usar onclick y onkeydown/onkeyup en su lugar (mediante el uso de onclick y onkeyup/onkeydown que abarca la configuración del mouse y el teclado de la casilla ). REFERENCIA: http://www.winvistatips.com/re-onchange-event-checkbox-not-working-properly-t311364.html

0

Creo que el problema va de aquí: $('#CheckBox' + id).attr("checked") == true. De acuerdo con las especificaciones de HTML, checked debe establecerse en "checked" cuando se desencadena este evento. Por lo tanto, intente utilizar algo como $('#CheckBox' + id).attr("checked") == "checked" o incluso $('#CheckBox' + id).attr("checked").

Como segunda opción, le recomiendo usar pure jquery para ejecutar su rutina. Por ejemplo, si usted tiene casilla <input type="checkbox" id="ac">, puede utilizar este código jq para manejar sus rutinas:

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

Este caso se muestra en this demo.

+0

Después de cambiar el evento 'onchange' en' onclick' todos son trabajos. Pero si uso onchange nada funciona. – isxaker

+0

Entonces podría ser que en el cambio no se dispare hasta que se encienda el fuego, intente fijar el foco en otro elemento después de marcar la casilla. –

+0

Ahora intento hacer eso. – isxaker

0

En su lugar, intente utilizar if($('#CheckBox' + id + ':checked').length > 0), de esa manera usted juntó jQuery, la casilla de verificación es checked o no.

Además, si el onChangeProblemCheckBox utiliza las propiedades internas en problemPicker pero no referens con ruta completa, es decir problemPicker.nnnnn se producirá un error ya que el evento se disparará en el contexto del elemento, no problemPicker. Sería como si la función se llamara así $('#CheckBox' + id).onChangeProblemCheckBox().