jQuery se unen evento click unbind
-
28-09-2019 - |
Pregunta
Estoy tratando de jQuery para calcular la cantidad de veces que un documento de identidad se ha hecho click. por ejemplo, si # kwick_1 se hace clic una vez, quiero que se cargue el video 'otra cosa' no hacer nada.
Y yo estoy mirando a aplicar esto a través de la función de lo que el mismo va para 2, 3, 4, etc.
¿Cómo puedo lograr esto?
var timesClicked = 0;
$('#kwick_1, #kwick_2, #kwick_3, #kwick_4, #kwick_5, #kwick_6, #kwick_7').bind('click', function(event){
var video = $(this).find('a').attr('href'); /* bunny.mp4 */
var clickedID = $(this).attr('id'); /* kwick_1 */
var vid = 'vid';
timesClicked++;
$(this).removeAttr('id').removeAttr('class').attr('id',clickedID + vid).attr('class',clickedID + vid);
if(timesClicked == 1) {
$.get("video.php", { video: video, poster: 'bunny.jpg', }, function(data){
$('.'+clickedID+vid).html(data);
});
} else {
/* Do nothing for now */
}
return false;
});
Solución
Se puede usar .one()
para hacer esto un poco más fácil, así:
$('#kwick_1, #kwick_2, #kwick_3, #kwick_4, #kwick_5, #kwick_6, #kwick_7').one('click', function(event){
var video = $(this).find('a').attr('href'), clicked = this.id + 'vid';
$(this).attr({ id: clicked, 'class': clicked });
$.get("video.php", { video: video, poster: 'bunny.jpg', }, function(data){
$('.'+clicked).html(data);
});
}).click(function() { return false; });
El resto es sólo la optimización y la reducción en el código repetido, pero la idea es unir la parte que sólo quiere pasar una vez usando .one()
, entonces ese manejador se borrará después de la primera ejecución. Entonces estamos unión del return false
usando .click()
ya que uno debe siempre suceder . Asegúrese de que este está obligado después como el ejemplo anterior, ya que los controladores de eventos se ejecutan en el orden en que fueron obligados.
También se podría reemplazar el selector de #kwick_1, #kwick_2....
con .kwick
si se les puede dar a toda una clase, esto por encima aún funcionaría y sería mucho más fácil de mantener.