Pregunta

He utilizado una función vuelo estacionario en el que hacer x e y en mouseover y mouseout. Estoy intentando el mismo para cada clic, pero no parece funcionar:

$('.offer').click(function(){ 
  $(this).find(':checkbox').attr('checked', true ); 
},function(){
  $(this).find(':checkbox').attr('checked', false ); 
});

Quiero que la casilla de verificación para comprobar cuando se hace clic en un div, y sin marcar si se hace clic de nuevo - un clic de palanca

.
¿Fue útil?

Solución

Esto se hace fácilmente moviendo el estado actual 'marcado' de la casilla de verificación sobre cada clic. Ejemplos:

 $(".offer").on("click", function () { 
       var $checkbox = $(this).find(':checkbox');
       $checkbox.attr('checked', !$checkbox.attr('checked'));
 });

o

 $(".offer").on("click", function () { 
       var $checkbox = $(this).find(':checkbox');
       $checkbox.attr('checked', !$checkbox.is(':checked'));
 });

o, mediante la manipulación directa del DOM 'verificado' propiedad (es decir, no utilizando attr() a Obtener el estado actual de la casilla de verificación hecho clic):

 $(".offer").on("click", function () { 
       var $checkbox = $(this).find(':checkbox');
       $checkbox.attr('checked', !$checkbox[0].checked);
 });

... y así sucesivamente.

Nota: desde jQuery 1.6, casillas de verificación deben establecerse utilizando prop no attr:

 $(".offer").on("click", function () { 
       var $checkbox = $(this).find(':checkbox');
       $checkbox.prop('checked', !$checkbox[0].checked);
 });

Otros consejos

Otro enfoque sería jQuery extendida de esta manera:

$.fn.toggleCheckbox = function() {
    this.attr('checked', !this.attr('checked'));
}

A continuación, llamar a:

$('.offer').find(':checkbox').toggleCheckbox();

Advertencia: utilizando attr () o prop () para cambiar el estado de una casilla de verificación no disparar el evento de cambio en la mayoría de los navegadores que he probado con. El estado de activación cambiará, pero sin propagación de eventos. Debe activar el evento de cambio manualmente después de establecer el atributo checked. Tenía algunos otros controladores de eventos de supervisión del estado de casillas de verificación y que trabajaría bien con el usuario hace clic directos. Sin embargo, establecer el estado de activación mediante programación no puede desencadenar el evento de cambio constante.

jQuery 1.6

$('.offer').bind('click', function(){ 
    var $checkbox = $(this).find(':checkbox');
    $checkbox[0].checked = !$checkbox[0].checked;
    $checkbox.trigger('change'); //<- Works in IE6 - IE9, Chrome, Firefox
});

¿Por qué no en una línea?

$('.offer').click(function(){
    $(this).find(':checkbox').attr('checked', !$(this).find(':checkbox').attr('checked'));
});

Tengo una sola casilla llamada chkDueDate y un objeto HTML con un evento de clic de la siguiente manera:

$('#chkDueDate').attr('checked', !$('#chkDueDate').is(':checked'));

Al hacer clic en el objeto HTML (en este caso un <span>) alterna la característica sea comprobada de la casilla de verificación.

jQuery:. La mejor manera, delegar las acciones para jQuery (jQuery jQuery =)

$( "input[type='checkbox']" ).prop( "checked", function( i, val ) {
    return !val;
});

intentar cambiar esto:

$(this).find(':checkbox').attr('checked', true ); 

a esto:

$(this).find(':checkbox').attr('checked', 'checked'); 

No es 100% seguro de si eso va a hacerlo, pero me parece recordar que tiene un problema similar. Buena suerte!

$('.offer').click(function(){ 
    if ($(this).find(':checkbox').is(':checked'))
    {
        $(this).find(':checkbox').attr('checked', false); 
    }else{
        $(this).find(':checkbox').attr('checked', true); 
    }
});
$('.offer').click(function() { 
    $(':checkbox', this).each(function() {
        this.checked = !this.checked;
    });
});

solución más fácil

$('.offer').click(function(){
    var cc = $(this).attr('checked') == undefined  ? false : true;
    $(this).find(':checkbox').attr('checked',cc);
});
<label>
    <input
        type="checkbox"
        onclick="$('input[type=checkbox]').attr('checked', $(this).is(':checked'));"
    />
    Check all
</label>

Otra solución alternativa para cambiar el valor casilla de verificación:

<div id="parent">
    <img src="" class="avatar" />
    <input type="checkbox" name="" />
</div>


$("img.avatar").click(function(){

    var op = !$(this).parent().find(':checkbox').attr('checked');
    $(this).parent().find(':checkbox').attr('checked', op);

});
    $('controlCheckBox').click(function(){
    var temp = $(this).prop('checked');
    $('controlledCheckBoxes').prop('checked', temp);
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top