2011-11-20 13 views
5

Tengo un enlace para múltiples entradas.¿Cómo puedo saber si se hizo clic en una casilla de verificación?

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something here 
    // do something extra here if $(this) was actually clicked 
}); 

ya que hay otras maneras de producir un cambio en una, (método .Cambiar de jQuery() para uno) de entrada, ¿Hay una manera de saber si una casilla de verificación se han hecho clic para provocar el evento de cambio?

Intenté enfocar pero el evento de foco se dispara antes del evento de cambio de una casilla para que no funcione.

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something here 
    if($(this).is(":focus")) // do something extra here but focus doesn't happen here for checkboxes. 
}); 

Edición # 1

Lo siento, no se sabe muy bien cómo aclarar esto más ... No me importa si se marca la casilla de verificación o no ... Yo sé lo. is (": checked") es y cómo usarlo. No ayuda aquí. Solo quiero saber si realmente se hizo clic en la casilla de verificación para activar el evento de cambio.

Edición # 2

que tienen un trabajo alrededor ... La primera vez que ato clics para las entradas y selecciona y almacenar el ID del elemento. Luego, en mi enlace de cambio, verifico si el elemento que cambió es el mismo elemento que se hizo clic por última vez.

$("input, select").click(function() { 
    var myId = $(this).attr("id"); 
    lastClickedStore.lastClicked = myId; 
}); 

Luego, en el enlace de cambio, solo compruebo si el ID actual es igual al último Id cliqueado.

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something 
    if(lastClickedStore.lastClicked == $(this).attr("id")) // do something else. 
} 
+0

Tal vez el $ (this.id) lo ayudará a identificarlo. Verifique mi respuesta editada. Lo siento si voy en círculos. –

Respuesta

0

Así que aquí es cómo he resuelto este problema. Primero vinculo los clics para las entradas y selecciono y almaceno la identificación del elemento.Luego, en mi enlace de cambio, verifico si el elemento que cambió es el mismo elemento que se hizo clic por última vez.

$("input, select").click(function() { 
    var myId = $(this).attr("id"); 
    lastClickedStore.lastClicked = myId; 
}); 

Luego, en el enlace de cambio, solo compruebo si el ID actual es igual al último Id cliqueado.

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() { 
    // do something 
    if(lastClickedStore.lastClicked == $(this).attr("id")) // do something else. 
} 
0

if ($ (this) .IS (': marcado')) ....

if ($ (this) .attr ('comprobado')) ...

EDITAR: también, si todas las casillas de verificación son para una "familia", asegúrese de que solo una pueda verificarse definiendo name = the-same-for-all-items e id = different para cada elemento.

Ex: 

<input type='checkbox' name='fruits' id='orange' >orange 
<input type='checkbox' name='fruits' id='melon' >melon 
<input type='checkbox' name='fruits' id='banana' >banana 
<input type='checkbox' name='fruits' id='apple' >apple 
<input type='checkbox' name='fruits' id='...' >.... 

EDIT: if it was clicked: the id? 

console.log($(this.id)); 
+0

Quizás deba aclarar mi pregunta ... No me importa para nada si la casilla está marcada o no. Me importa si se hizo clic para activar el evento de cambio. – kasdega

0

Se puede tratar de hacer:

 
$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("click", function() { 
    // do something here 
    if($(this).is(":checked")) // do something extra here but focus doesn't happen here for checkboxes. 
}); 

creo que sirve

10

Enlazar a click en lugar de change. El evento click todavía se activa cuando el estado de la casilla de verificación se cambia con el teclado, pero event.pageX y event.pageY será 0 en ese caso, por lo que puede escribir:

$("#foo, #bar, #fooCheckbox, #barCheckBox").click(function(event) { 
    // Do something here... 
    if (event.pageX > 0) { 
     // Check box was clicked, do something extra here... 
    } 
}); 
+0

bravo ............. – Rafay

+0

Interesante ... Aunque no me da lo que necesito. El enlace para "cambiar" es por una razón. Hacer clic no significa cambiar todo el tiempo, especialmente en esta situación donde #foo es un cuadro de selección. Sin embargo, todo lo que se dice, excelente idea sobre la página X, tendré que incorporar eso. – kasdega

-1

Prueba esto:

<input type="checkbox" onClick="doSomething()"> 

    or 

$("#foo","#bar","#fooCheckbox","#barCheckBox").click(function(){ 
    doSomething(); 
}); 
+0

d own vo te s? –

1

La respuesta de Frédéric Hamidi es buena. Pero si desea plantear un evento 'cambiar' mediante programación, entonces su código, lamentablemente, no funcionará. Si realmente quiere lo que usted describe, prueba esta versión:

$('#foo, #bar').bind({ 
    click: function() { 
     alert('click ' + this.id); 
     if ($(this).hasClass('changed')) { 
      alert('click+change ' + this.id); 
      $(this).removeClass('changed'); 
     } 
    }, 
    change: function() { 
     alert('change ' + this.id); 
     $(this).addClass('changed'); 
    } 
}); 

Demo.

Cuestiones relacionadas