Domanda

Ho un problema con il fingere un ancoraggio clic tramite jQuery:Perché il mio thickbox viene visualizzata la prima volta che clicco sul pulsante di input, ma non la seconda o la terza volta?

Ecco il mio codice:

<input onclick="$('#thickboxId').click();" type="button" value="Click me" />

<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>

Non sempre funziona, quando clicco direttamente sul link, ma non se provo ad attivare il javascript tramite il pulsante di ingresso.Questo è in FF.Per Chrome sembra funzionare ogni volta.Suggerimenti?

È stato utile?

Soluzione

Cercate di evitare inlining tuo jQuery chiama così. Metti un tag script nella parte superiore della pagina per legarsi alla manifestazione click:

<script type="text/javascript">
$(function(){
    $('#thickboxButton').click(function(){
        $('#thickboxId').click();
    });
});
</script>

<input id="thickboxButton" type="button" value="Click me">
<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>

Modifica

Se si sta cercando di simulare un utente fa clic sul collegamento fisico, quindi non credo che sia possibile. Una soluzione potrebbe essere quella di aggiornare evento click del pulsante per cambiare il window.location in Javascript:

<script type="text/javascript">
$(function(){
    $('#thickboxButton').click(function(){
        window.location = $('#thickboxId').attr('href');
    });
});
</script>

Modifica 2:

Ora che mi rendo conto che Thickbox è un widget personalizzato jQuery UI, ho trovato le istruzioni qui :

Istruzioni:

  • Crea un elemento di collegamento (<a href>)
  • Dare il link di un attributo class con un valore di thickbox (class="thickbox")
  • Nell'attributo href del collegamento aggiungere il seguente ancoraggio: #TB_inline
  • l'attributo href dopo la #TB_inline aggiungere la seguente stringa di query al ancoraggio:

    ? Height = 300 & width = 300 & inlineId = myOnPageContent

  • modificare i valori di altezza, larghezza, e inlineId nella query di conseguenza (inlineID è il valore ID dell'elemento che contiene il contenuto che si desidera visualizzare in un thickbox.

  • Opzionalmente è possibile aggiungere modale = true alla stringa di query (per esempio #TB_inline?height=155&width=300&inlineId=hiddenModalContent&modal=true) in modo che la chiusura di un thickbox richiederà chiamando la funzione tb_remove() dall'interno del thickbox. Vedere l'esempio contenuto modale nascosta, in cui è necessario fare clic su Sì o No per chiudere la thickbox.

Altri suggerimenti

Che cosa ha funzionato per me era:

$('a.mylink')[0].click()

Recentemente ho trovato come attivare evento clic del mouse tramite jQuery.

    <script type="text/javascript">
    var a = $('.path > .to > .element > a')[0];
    var e = document.createEvent('MouseEvents');
    e.initEvent( 'click', true, true );
    a.dispatchEvent(e);
    </script>

questo approccio funziona su Firefox, Chrome e IE. Speranza che aiuta qualcuno:

var comp = document.getElementById('yourCompId');
try { //in firefox
    comp.click();
    return;
} catch(ex) {}
try { // in chrome
    if(document.createEvent) {
        var e = document.createEvent('MouseEvents');
        e.initEvent( 'click', true, true );
        comp.dispatchEvent(e);
        return;
    }
} catch(ex) {}
try { // in IE
    if(document.createEventObject) {
         var evObj = document.createEventObject();
         comp.fireEvent("onclick", evObj);
         return;
    }
} catch(ex) {}

Anche se questo è molto vecchia domanda ho trovato qualcosa di più facile da gestire questo compito. Si tratta di plugin per jQuery sviluppato dal team di jQuery UI chiamato simulazione. è possibile includere dopo jquery e quindi si può fare qualcosa di simile

<a href="http://stackoverflow.com/"></a>
$('a').simulate('click');

funziona bene in Chrome, Firefox, Opera e IE10.you possono scaricarlo da https://github.com/eduardolundgren/jquery-simulate/blob/master/jquery.simulate.js

Il titolo della domanda dice: "Come posso simulare un ancoraggio fare clic in jQuery?".Beh, si può utilizzare il "trigger" o "triggerHandler" metodi, in questo modo:

<script type="text/javascript" src="path/to/jquery.js"></script>
<script type="text/javascript" src="path/to/thickbox.js"></script>
<script type="text/javascript">
$(function() {
    $('#btn').click(function() {
        $('#thickboxId').triggerHandler('click');
    })
})
</script>
...
<input id="btn" type="button" value="Click me">
<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>

Non testato, questo script vero e proprio, ma ho usato trigger et al, prima, e hanno lavorato'ight.

AGGIORNAMENTO
triggerHandler in realtà non fa quello che l'OP vuole.Penso 1421968 fornisce la migliore risposta a questa domanda.

Io suggerirei di guardare l'API selenio per vedere come essi innescare un clic su un elemento in un modo compatibile con browser:

Se vuoi inserire la funzione BrowserBot.prototype.triggerMouseEvent.

Credo che si può usare:

$('#yourLink').bind('click', function() {
  //Do something over here
});

$('#yourLink').trigger('click');

In questo modo facilmente innescare la funzione di scatto, senza in realtà cliccando su di esso.

Avete bisogno di fingere un ancoraggio click? Dal sito thickbox:

  

thickbox può essere richiamato da un elemento di collegamento, elemento di input (tipicamente un pulsante), e l'elemento di zona (mappe immagine).

Se questo è accettabile dovrebbe essere facile come mettere la classe thickbox sull'ingresso stessa:

<input id="thickboxButton" type="button" class="thickbox" value="Click me">

In caso contrario, mi consiglia di utilizzare Firebug e mettendo un punto di interruzione nel metodo onclick dell'elemento di ancoraggio per vedere se è attivato solo al primo scatto.

Modifica:

Va bene, ho dovuto provare per me e per me più o meno esattamente il codice ha lavorato sia in Chrome e Firefox:

<html>
<head>
<link rel="stylesheet" href="thickbox.css" type="text/css" media="screen" />
</head>
<body>
<script src="jquery-latest.pack.js" type="text/javascript"></script>
<script src="thickbox.js" type="text/javascript"></script>
<input onclick="$('#thickboxId').click();" type="button" value="Click me">
<a id="thickboxId" href="myScript.php" class="thickbox" title="">Link</a>
</body>
</html>

I pop-up finestra non importa se clicco l'ingresso o l'elemento di ancoraggio. Se il codice precedente funziona per voi, vi suggerisco il vostro errore è altrove e che si tenta di isolare il problema.

Un altro forse è che stiamo utilizzando diverse versioni di jquery / thickbox. Sto usando quello che ho ottenuto dalla pagina thickbox -. 1.3.2 jQuery e thickbox 3.1

È possibile creare un modulo tramite jQuery o nel codice della pagina HTML con un'azione che imita il tuo link href:

<a id="anchor_link" href="somepath.php">click here</a>.

var link = $('#anchor_link').attr('href');
$('body').append('<form id="new_form" action="'+link+'"></form>');
$('#new_form').submit();

Per simulare un clic su un ancoraggio durante l'atterraggio su una pagina, ho solo usato jQuery per animare la proprietà scrollTop in $(document).ready. Non c'è bisogno di un trigger complesse, e che funziona su IE 6 e ogni altro browser.

Se non è necessario utilizzare JQuery, come non lo faccio. Ho avuto problemi con il func cross browser di .click(). Quindi io uso:

eval(document.getElementById('someid').href)

In JavaScript si può fare in questo modo

function submitRequest(buttonId) {
    if (document.getElementById(buttonId) == null
            || document.getElementById(buttonId) == undefined) {
        return;
    }
    if (document.getElementById(buttonId).dispatchEvent) {
        var e = document.createEvent("MouseEvents");
        e.initEvent("click", true, true);
        document.getElementById(buttonId).dispatchEvent(e);
    } else {
        document.getElementById(buttonId).click();
    }
}

ed è possibile utilizzarlo come

submitRequest("target-element-id");

Utilizzando la sceneggiatura di Jure ho fatto questo, in modo semplice "click", come molti elementi come si desidera.
Ho appena usato Google Reader su 1600+ articoli e ha funzionato perfettamente (in Firefox)!

var e = document.createEvent('MouseEvents');
e.initEvent( 'click', true, true );
$(selector).each(function(){this.dispatchEvent(e);});

JQuery('#left').triggerHandler('click'); funziona bene in Firefox e IE7. Non ho ancora testato su altri browser.

Se vuole innescare utente fa clic automatici effettuare le seguenti operazioni:

window.setInterval(function() 
    {
        $('#left').triggerHandler('click');
    }, 1000);

Questo non funziona sul browser nativo di Android per fare clic "elemento nascosto di input (file)":

$('a#swaswararedirectlink')[0].click();

Ma questo funziona:

$("#input-file").show();
$("#input-file")[0].click();
$("#input-file").hide();

Nel tentativo di simulare un 'click' nel test di unità con il filatore jQuery UI non ho potuto ottenere nessuna delle risposte precedenti al lavoro. In particolare, stavo cercando di simulare il 'giro' di selezionare la freccia verso il basso. Ho guardato il test e loro unità filatore jQuery UI utilizzare il seguente metodo, che ha funzionato per me:

element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top