tagify tageditor tag bootstrap jquery button click scroll

tageditor - tagify jquery



Detectar el botón del medio(botón de desplazamiento) con jQuery (6)

Tengo una lista con etiquetas para reproducir algunos archivos mp3 en un clic. Está funcionando bien al vincular el evento ''clic'' con jQuery:

$oo.data({''__mp3play'':true,''wapiHandle'':h+0,''wapiIndex'':o.ajaxPlayList[h].length}) .bind( ''click'', function() { var wh = $j(this).data(''wapiHandle''); if( typeof o.regObjects[wh] == ''object'' && o.regObjects[wh].play(this.href)) { return false; } });

Al hacer clic en el botón izquierdo del mouse: Desactiva el manejo predeterminado cuando mi plugin flash está cargado, de lo contrario se abrirá normalmente.

PERO: cuando uso el botón de desplazamiento del mouse y hago clic en él, el evento de clic no se activará y el enlace se abrirá normalmente.

He intentado usar eventos de ratón o ratón pero no ayuda, el enlace siempre se abre normalmente con el efecto secundario de que la música comienza a reproducirse también con el reproductor de flash.

También preventDefault() no funciona en absoluto.

¿Alguien puede decirme cómo detectar el clic del botón central del mouse (clic del botón de desplazamiento)?

Gracias por tus comentarios.

PD: Ya he probado otras soluciones sobre el ''botón central'' disponible en este sitio.

Probado en todo tipo de navegadores con el mismo resultado.

EDITAR: Esto tampoco funciona, el enlace se abrirá normalmente cuando se usa el botón central del mouse. Cuando se usa el botón izquierdo del ratón, no pasa nada.

$oo.bind( ''mousedown click mouseup'', function(e) { e.preventDefault(); e.stopPropagation(); return false; });


Bueno, después de una prueba rápida, parece que los tres están ordenados de la siguiente manera:

  • Izquierda - 1
  • Medio - 2
  • Derecha - 3

Así que si tuvieras:

$(document).mousedown(function(e){ switch(e.which) { case 1: //left Click break; case 2: //middle Click break; case 3: //right Click break; } return true;// to allow the browser to know that we handled it. });


Esta bien chicos

Gracias por su aporte. ''@ no.good.at.coding'' tiene una buena solución pero no funciona en IE (ver más adelante en este escrito), pero es un buen punto de partida. Le cambio su código a esto:

// Avoid relations will be opened in extra tab when clicking middle-scroll-button to open it $(document).bind($.browser.msie ? "mousedown" : "click", function(e) { if (e.which == 2 && e.target.tagName == ''A'') { var bIE = $.browser.msie, $o = $(e.target), oe = $o.data(''events''), b = true, f = function(){}; if (typeof oe == ''object'' && oe[''click'']) { f = function(){ $o.trigger(''click''); } } else { b = (typeof $o[0].href == ''string'' && ($o[0].target == undefined || $o[0].target == '''' || $o[0].target == ''_self'')); if (b) { f = function () { window.location.href=$o[0].href; }; } } if (!b) { return; } e.stopImmediatePropagation(); e.stopPropagation(); e.preventDefault(); if (bIE) { if (!window.__swcp__) { window.__swcp__= $(''<div style="position:fixed;top:0px;left:0px;width:100%;height:100%;background:#000;display:block;z-index:9999;opacity:0.01;filter:alpha(opacity:1);" />'').appendTo(''body''); } window.__swcp__.show(); } setTimeout(f, 50); if (bIE) { setTimeout( function() { window.__swcp__.hide(); }, 1000 ); } return false; } });

El botón central actúa ahora como el botón izquierdo de un mouse. Como puede ver, IE necesita algo más, debemos desenfocar la etiqueta de enlace durante 1 segundo para evitar que se abra en una pestaña adicional. Utilizo aquí una forma sencilla de hacer esto, cree un div ''transparente para el ojo'' (opacidad = 0.01) que se colocará sobre el contenido de la ventana para que cualquier enlace en la página quede desenfocado. El usuario no notará ninguna diferencia, excepto que el puntero del mouse puede cambiar de puntero a predeterminado y luego de un segundo vuelve a apuntar (solo IE). Puedo vivir con eso.

Acepto esto como una respuesta, pero si tienes una mejor idea, házmelo saber.


Ok, creo que lo tengo. Aquí hay un violín que parece funcionar . El truco (al menos con FF4) parece ser vincular un controlador de clic al document y hacer que detenga la propagación.

$(document).click(function(e){ //not checking for the right click will prevent the context-menu from showing, you may or may not want to do that if (e.which != 3) { e.preventDefault(); return false; } });

Esta solución se encontró en esta página del foro .


Por favor , no mousedown las acciones de clics durante el evento de mousedown . Ignora el resto de la canalización del evento y va en contra de las expectativas actuales del usuario y las prácticas de diseño.

Problema

Aquí hay un vistazo al orden normal de los eventos que se activan para cada tipo de clic:

$(document).on("mousedown mouseup click focus blur",function(e) { console.log("{" + e.which + ":" + e.type + "}"); });

Por lo general, manejamos el último evento de click porque significa que la intención final de los usuarios es continuar con la acción actual.

El evento de click se activa cuando se presiona un botón de dispositivo señalador ( generalmente el botón principal de un mouse ) y se suelta en un solo elemento .

Desafortunadamente, las pulsaciones del botón central no activan un evento de este tipo (probablemente porque hacerlo obligaría a los desarrolladores a escuchar el evento de clic para distinguir entre múltiples invocaciones posibles). Pero si queremos conectar acciones contra el clic central, debemos seguir las mismas expectativas de UX.

Solución

Escucharemos los eventos de mousedown y adjuntaremos inmediatamente un controlador de uso a tiempo para los eventos mouseup . Si se presionó la tecla del medio y si los elementos coinciden, trigger nuestro propio evento personalizado con el tipo de middleclick , que derivaremos del evento original .

$(document).on("mousedown", function (e1) { $(document).one("mouseup", function (e2) { if (e1.which == 2 && e1.target == e2.target) { var e3 = $.event.fix(e2); e3.type = "middleclick"; $(e2.target).trigger(e3) } }); });

Eso ayudará a separar la determinación de si se hizo clic en el botón central con la forma en que queremos manejarlo en ese caso, por lo que podemos configurar un oyente para nuestro tipo de evento personalizado como este:

$(document).on("middleclick", function (e) { console.log("{" + e.target.nodeName.toLowerCase() + ":" + e.type + "}"); });

Demo de trabajo en jsFiddle y Stack Snippets:

$(document).on("mousedown", function (e1) { $(document).one("mouseup", function (e2) { if (e1.which == 2 && e1.target == e2.target) { var e3 = $.event.fix(e2); e3.type = "middleclick"; $(e2.target).trigger(e3) } }); }); $(document).on("middleclick", function (e) { console.log("{" + e.target.nodeName.toLowerCase() + ":" + e.type + "}"); }); $(document).on("mousedown mouseup click focus blur",function(e) { console.log("{" + e.which + ":" + e.type + "}"); });

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script> <div style="background:#31965a;color:white;width:100px;height:100px;line-height:100px;text-align:center;"> Click Me! </div>

* Probado en Chrome, FF, Edge e IE11


Si usted (como yo) encontró esto debido a errores extraños de clics del medio clic de los clientes. Y solo desea que cualquier clic central o derecho se comporte como un clic izquierdo

Olvide todo ese código cojo para IE.

Corto y dulce:

$(document).click(function(e){ // checking for any non left click and convert to left click. if (e.which != 1) { e.which = 1; } });

Obviamente, si necesitas un poco más de discriminación, puedes hacer algo como:

$(''a.no-non-left-clickies'').click(function(e){ // checking for any non left click and convert to left click. if (e.which != 1) { e.which = 1; } });


e.que debería hacerlo:

Ejemplo simple:

$(document).ready(function(){ $(document).mousedown(function(e){ alert(e.which); // ##=> left }) })