right evento disparar context change bootstrap javascript jquery safari click

javascript - evento - jQuery.click() funciona en todos los navegadores excepto en Safari



jquery contextmenu selector (4)

La respuesta de Trevor Dixon arregla Safari, pero se rompe incluso en el último Firefox:

TypeError: No hay argumentos suficientes para MouseEvent.initMouseEvent

La mejor forma de admitir Safari, sin romper Firefox, sería utilizar initEvent lugar de initMouseEvent de la initMouseEvent manera:

var element = document.getElementById(''your_id_here''); if(element.click) element.click(); else if(document.createEvent) { var eventObj = document.createEvent(''MouseEvents''); eventObj.initEvent(''click'',true,true); element.dispatchEvent(eventObj); }

Para actualizar en 2016, se debe utilizar MouseEvent lugar de initMouseEvent que está en desuso:

var eventObj = new MouseEvent("click", { bubbles: true, cancelable: true }); element.dispatchEvent(eventObj);

Tengo un fragmento de JavaScript que crea dinámicamente una etiqueta A dentro de un div existente y luego llama a la función jQuery para "hacer clic" en él. Esto funciona según lo previsto en todos los navegadores excepto en Safari.

Safari devuelve el siguiente error:

''undefined'' no es una función (evaluando ''$ (''. shell a '') [0] .click ()'')

Cualquier idea sobre lo que estoy haciendo mal o por qué esto no funciona en Safari y cómo hacer que funcione (o un código que funcione en todos los navegadores) He intentado usar .trigger("click") como bien y da el mismo error.

JavaScript

function writeAndClickLink(url) { $(''.shell'').html(''<a href="'' + url + ''"></a>''); $(''.shell a'')[0].click(); }

y en el HTML:

<div class="shell"></div>

La razón por la que lo hago de esta manera extraña es que se llama a la función desde un sitio Flash para abrir una ventana de Twitter donde estoy dando una recompensa por twittear. Hasta ahora, esta ha sido la única forma en que pude hacer que el evento "tweet" se vincule a la ventana. Si abro la ventana de otra forma (window.open por ejemplo) no captura el evento enlazado que me permite saber que realmente completaron el tweet.

El flujo es algo así como:

  • El usuario hace clic en el botón tweet en flash
  • Flash llama a la función javascript para escribir dinámicamente href y "hacer clic" en él
  • Se abre la ventana de Twitter
  • El usuario tweets con éxito
  • Se captura el evento Tweet y las actualizaciones parpadean con éxito
  • El contenido está desbloqueado en flash

$(''.shell a'')[0] devuelve el elemento DOM nativo que no tiene dos métodos jQuery vinculados a él

Elimine "[0]" para mantener el objeto jQuery para usar los métodos jQuery

$(''.shell a'').click()


$(''.shell a'')[0] obtiene un objeto DOM del objeto jQuery. Ese objeto DOM solo tiene métodos DOM (no métodos jQuery) y no hay un método industrial .click() en un elemento <a> hasta HTML5 y aún no está implementado en todos los navegadores, por lo que verá una implementación incompleta en diferentes navegadores. .

Tienes un par de opciones. La primera opción obtiene un objeto jQuery y utiliza el método .click() en el objeto jQuery. Esto solo funcionará de manera confiable si está activando los manejadores de clics de jQuery, no si solo desea el clic predeterminado para la etiqueta <a> .

function writeAndClickLink(url) { $(''.shell'').html(''<a href="'' + url + ''"></a>''); $(''.shell a'').eq(0).click(); }

O bien, si al hacer clic en la URL solo se va a ir a una página web nueva, no se moleste en modificar el DOM y simplemente establecer window.location ya que no tiene sentido modificar el DOM si solo va a un nueva página web:

function writeAndClickLink(url) { window.location = url; }