Bir bağlantı tıklamasını jquery ile nasıl simüle edebilirim?


145

JQuery aracılığıyla bir çapa tıklamasını taklit etmekte sorun yaşıyorum: Neden kalın kutum giriş düğmesine ilk tıkladığımda görünüyor, ancak ikinci veya üçüncü seferde görünmüyor?

İşte kodum:

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

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

Doğrudan bağlantıya tıkladığımda her zaman çalışıyor, ancak kalın kutuyu giriş düğmesiyle etkinleştirmeyi denediğimde işe yaramıyor. Bu FF'de. Chrome için her seferinde çalışıyor gibi görünüyor. Herhangi bir ipucu?


1
Kodu burada bırakıyorsunuz. Bize gösterdiğiniz bağlantı için tıklama etkinliğiyle ilişkili bir kod yok. Bu kod ne işe yarar? İlgili başka bir kod var mı?
Matt

1
@Matt Eğer tıklama yöntemini parametresiz kullanırsanız, artık bir olay bağlama olarak yorumlanmaz, aslında zincirlendiği öğeyi (farenizle tıklarmışsınız gibi) TIKLAYACAKTIR. Bu durumda, giriş elemanı tıklandığında, 'thickboxId' kimliğine sahip eleman da tıklanmalıdır.
KyleFarris

3
@KyleFarris: Click () olayı, tıklanacak öğenin kendisine eklenmiş bir onclick olayı olmadığı sürece Chrome veya Safari'de çalışmaz ve yine de yalnızca o parçayı tetikler ve href değerine gitmez. Yukarıdaki durumda, kullanıcı bağlantıyı tıklamış gibi A etiketinin href özelliğine gitmesini ister.
Senseful

Yanıtlar:


123

JQuery çağrılarınızı bu şekilde satır içine almaktan kaçının. clickEtkinliğe bağlanmak için sayfanın üst kısmına bir komut dosyası etiketi yerleştirin :

<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>

Düzenle:

Bir kullanıcıyı fiziksel olarak bağlantıya tıklayarak simüle etmeye çalışıyorsanız, bunun mümkün olduğuna inanmıyorum. Bir geçici çözüm , Javascript'teki düğmeyi clickdeğiştirmek için düğmenin etkinliğini güncellemek olabilir window.location:

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

Düzenleme 2:

Artık Thickbox'ın özel bir jQuery UI pencere öğesi olduğunu anladığıma göre, talimatları burada buldum :

Talimatlar:

  • Bir bağlantı öğesi oluşturun ( <a href>)

  • Bağlantıya thickbox ( class="thickbox") değerine sahip bir sınıf özelliği verin

  • Bağın hrefniteliğine aşağıdaki bağlantıyı ekleyin:#TB_inline

  • In hrefsonra öznitelik #TB_inlineeklenti demire aşağıdaki sorgu dizesi:

    ? height = 300 & width = 300 & inlineId = myOnPageContent

  • Sorgudaki yükseklik, genişlik ve inlineId değerlerini uygun şekilde değiştirin (inlineID, bir ThickBox'ta göstermek istediğiniz içeriği içeren öğenin kimlik değeridir.

  • İsteğe bağlı olarak, sorgu dizesine modal = true ekleyebilirsiniz (örn. #TB_inline?height=155&width=300&inlineId=hiddenModalContent&modal=true), Böylece bir ThickBox'ı kapatmak, tb_remove()işlevi ThickBox içinden çağırmayı gerektirir . ThickBox'ı kapatmak için evet veya hayır'ı tıklamanız gereken gizli kalıcı içerik örneğine bakın.


Tıklama işleyicisindeki window.location çalışmaz, bu durumda kalın kutu beklendiği gibi çalışmaz.
prinzdezibel

İkinci örnekte , çözülen url'yi almak .prop()yerine kullanılması tavsiye edilebilir attr().
Kevin Bowersox

Bunun kabul edilen cevap olmasına şaşırdım. Tıklama tetikleyicisi, jQuery sarmalayıcı öğesinde değil, yalnızca yerel DOM öğesinde çalışır. Bu konu @Stevanicus tarafından ve yorumlarda ve diğer birkaç SO gönderisinde tartışılmaktadır. Cevap Stevanicus'un cevabı olarak değiştirilmelidir.
Oliver

@Schollii - istediğiniz doğrulukta düzenlemekten çekinmeyin.
John Rasch

3
Kabul edilen cevabın @stevanicus olması gerektiğini kastettim
Oliver

195

Benim için işe yarayan şuydu:

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

1
. sonraki kısmın bir sınıf adı olduğunu bağışlar. # bir id için olacaktır.
Stevanicus

3
Bir girdi için gerekliyse, focusyerine kullanın click:)
Andrius Naruševičius

Bu benim için de işe yarıyor, ama bu neden işe yarıyor? $ ['A.mylink'] [0] .click () çalışıyor ama $ ['a.mylink']. Eq (0) .click () neden çalışmıyor?
ChrisC

4
[0]dizinin ilk öğesini gösterir - bir seçici çalıştırıldığında 0 veya daha fazla öğe döndürür. .click()Görünüşe göre diğer çağrılar çerçeve genelinde seçicilerden gelen öğe koleksiyonlarına uygulandığı için doğrudan burada çalışmıyor gibi görünmesi talihsiz bir durum .
cfeduke

8
Kullanmak [0]veya .get(0)aynıdır. Bunlar, jQuery sürümü yerine öğenin DOM sürümünü kullanır. .click()Bu durumda işlev jQuery tıklama etkinliği, ancak yerli biri değildir.
Radley Sustaire

19

Yakın zamanda jQuery aracılığıyla fare tıklama olayını nasıl tetikleyeceğimi buldum.

    <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>

1
Bunun IE'de çalıştığını sanmıyorum, en azından 7 veya 8'de çalışmıyor, çünkü belgede bir createEvent yöntemi yok gibi görünüyor.
Jeremy

Eagle'ın dediği gibi, bu webkit tarayıcılarında çalışır. Ancak burada gerçekten jQuery kullanmadığınızı unutmayın ($ seçimi dışında)
tokland


9

bu yaklaşım firefox, chrome ve IE üzerinde çalışır. umarım birine yardımcı olur:

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) {}

Kanımca çapraz uyumluluk nedeniyle çok yardımcı ve daha iyi bir seçenek. Her şeyi dene / yakala bloklarına sarmak zorunda kalmaktan hoşlanmıyorum, ancak bunun her tarayıcı için girişimleri basamaklamak için yapıldığını anlıyorum.
h0r53

8

Bu çok eski bir soru olmasına rağmen, bu görevi halletmek için daha kolay bir şey buldum. Simulate adlı jquery UI ekibi tarafından geliştirilen jquery eklentisidir. jquery'nin arkasına ekleyebilir ve ardından şöyle bir şey yapabilirsiniz:

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

chrome, firefox, opera ve IE10'da iyi çalışıyor. https://github.com/eduardolundgren/jquery-simulate/blob/master/jquery.simulate.js adresinden indirebilirsiniz.


Önemli bir özelliği simulate(), jQuery olaylarını göndermesinin yanı sıra yerel tarayıcı eylemini tetiklemesidir. Bu şimdi doğru cevap +1
Kodlama Geçti

Bir cazibe gibi çalışıyor ve kullanıcı kendo ızgaramdaki bir düğmeye tıkladığında sayfayı yeni bir sekmede açmama izin veriyor.
John Sully

6

Soru başlığı "jQuery'de bir bağlantı tıklamasını nasıl simüle edebilirim?" Der. Pekala, "trigger" veya "triggerHandler" yöntemlerini şu şekilde kullanabilirsiniz:

<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>

Test edilmedi, bu gerçek komut dosyası, ancak daha triggerönce ve diğerlerini kullandım ve bir şekilde çalıştılar.

UPDATE
triggerHandler aslında OP'nin istediğini yapmaz. Bence 1421968 bu soruya en iyi cevabı veriyor.



4

Kullanabileceğine inanıyorum:

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

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

Bu, tıklama işlevini gerçekten tıklamadan kolayca tetikleyecektir.


2

Bir bağlantı tıklaması taklidi yapmanız gerekiyor mu? Kalın kutu sitesinden:

ThickBox, bir bağlantı öğesinden, giriş öğesinden (tipik olarak bir düğme) ve alan öğesinden (görüntü eşlemeleri) çağrılabilir.

Bu kabul edilebilirse, kalın kutu sınıfını girdinin kendisine koymak kadar kolay olmalıdır:

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

Değilse, Firebug kullanmanızı ve yalnızca ilk tıklamada tetiklenip tetiklenmediğini görmek için bağlantı öğesinin onclick yöntemine bir kesme noktası yerleştirmenizi öneririm.

Düzenle:

Tamam, kendim için denemeliydim ve benim için kodunuz hem Chrome hem de Firefox'ta tam olarak çalıştı:

<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>

Girişe veya bağlantı elemanına tıklasam da pencere açılır. Yukarıdaki kod sizin için çalışıyorsa, hatanızın başka bir yerde olduğunu ve sorunu izole etmeye çalışmanızı öneririm.

Bir başka olasılık da jquery / thickbox'ın farklı sürümlerini kullanmamızdır. Thickbox sayfasından aldığım şeyi kullanıyorum - jquery 1.3.2 ve thickbox 3.1.


Evet, sahte yapmam gerekiyor ve evet tıklama işleyicinin kendisi çalışıyor. Ama aslında onclick olayını hiç ayarlamadım ve işe yarıyor, sadece ilk seferinde. Ancak kalın kutuda işlenen onclick ile de çalışmayacaktır.
prinzdezibel

Demek istediğim, giriş öğesine her tıkladığınızda bağlantı öğesindeki onclick'in tetiklendiğini doğrulamaktı. Oh, ve yukarıdaki düzenlememe bakın.
waxwing

2

JQuery aracılığıyla veya HTML sayfa kodunda, link href'inizi taklit eden bir eylemle bir form oluşturabilirsiniz:

<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();

Bu yöntem, basitçe bir bağlantıya atlamak yerine tüm sayfanın yeniden yüklenmesine neden olur. Ek olarak, "?" url sayfa haline gelmesi için example.com?#test yerine example.com # testi . Chrome ve Safari'de test edildi.
Senseful

FF'de bu güzel çalışacak. Webkit tarayıcılarında, Senseful'ın açıkladığı gibi url'leri alacaksınız. Ama bu sorun değil, değil mi?
sdepold

2

Bir sayfaya girerken bir bağlantıya tıklamayı simüle etmek $(document).ready.için, karmaşık bir tetikleyiciye gerek yok seçeneğinde scrollTop özelliğine animasyon uygulamak için jQuery'yi kullandım ve bu, IE 6'da ve diğer tüm tarayıcılarda çalışıyor.


2

Benim gibi JQuery kullanmanız gerekmiyorsa. Tarayıcılar arası işleviyle ilgili sorunlar yaşadım .click(). Bu yüzden kullanıyorum:

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

Hızlı ve kirli ama benim için çalıştı. JQuery'de bu eval ($ ("# birid"). Attr ("href"));
mhenry1384

2

Javascript'te bunu yapabilirsin

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();
    }
}

ve bunu şu şekilde kullanabilirsin

submitRequest("target-element-id");

1

Jure'un komut dosyasını kullanarak, istediğiniz kadar çok öğeyi kolayca "tıklamak" için bunu yaptım.
Google Reader’ı 1600+ öğede kullandım ve mükemmel çalıştı (Firefox’ta)!

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

Bunun IE'de çalıştığını sanmıyorum, en azından 7 veya 8'de çalışmıyor, çünkü belgede bir createEvent yöntemi yok gibi görünüyor.
Jeremy

Bunun yerine document.createEventObject () öğesinin IE'de kullanılması gerektiğine inanıyorum, ancak henüz denemedim.
fregante

@ bfred.it: Görünüşe createEventObjectgöre IE'de sentetik bir olay göndermek yerine işleyicilere iletilecek bir olay nesnesi oluşturmak için daha fazla şey var. IE'ler fireEventdaha yakın olabilir dispatchEvent, ancak yalnızca dinleyicileri tetikler - varsayılan tarayıcı eylemlerini değil. Ancak, IE'de clickyöntemi çağırabilirsiniz .
theazureshadow

1

JQuery('#left').triggerHandler('click');Firefox ve IE7'de iyi çalışıyor. Diğer tarayıcılarda test etmedim.

Otomatik kullanıcı tıklamalarını tetiklemek istiyorsanız aşağıdakileri yapın:

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

1

Bu, Android yerel tarayıcısında "gizli giriş (dosya) öğesini" tıklamak için çalışmaz:

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

Ancak bu işe yarar:

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

0

JQuery UI döndürücüsüyle birim testlerinde bir 'tıklama' simülasyonu yapmaya çalışırken, işe yarayacak önceki yanıtların hiçbirini alamadım. Özellikle, aşağı oku seçmenin 'dönüşünü' simüle etmeye çalışıyordum. JQuery UI döndürücü birim testlerine baktım ve benim için çalışan aşağıdaki yöntemi kullanıyorlar:

element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.