2016-03-26 14 views
1

JQuery'nin .trigger() işlevini belirlemeye yardımcı olmak için biraz yardıma ihtiyacım var. Tamamen izinsiz kaynak kodu ile bir web tarayıcı eklentisi ile çalışıyorum. Main.js dosyası, birlikte çalışan binlerce satırlık tek aralıklı kod içeriyor, bu yüzden neredeyse okunamıyor. Bu nedenle, eklenti içindeki herhangi bir fonksiyona doğrudan erişim bir seçenek değildir.JQuery's .trigger() kaynak koduna erişemediğim bir öğeyle nasıl kullanılır?

Tarayıcıda eklenti içinde görüntülenen bir düğme gibi davranan bir div tetiklemem gerekiyor. Öğenin kimliğine sahibim, bu yüzden jQuery aracılığıyla erişebiliyorum. Bana göre, bu div ile ilgili herhangi bir işlevin ne işe yaradığını anlamanın en kolay yolu, bu div öğesi üzerinde .trigger("click") kullanmaktır. Ancak, belgelere dayalı ve beni onunla etrafındaki takım, hedef div kurarsanız .trigger("click") sadece çalışmak görünüyor: Bir elemanın üzerinde çalışmaya .trigger("click") almanın bir yolu var mı

$("#foo").on("click", function(){...}); 

o gerçekten can Aksi takdirde manipüle etmek?

+0

Hangi tarayıcı için eklenti yazıyorsun? –

+0

Firefox'ta çalışıyor ancak Chrome'da da yapabilir. – plumsmugler

cevap

0

Aşağıdakileri kullanmayı denediniz mi?

$('#foo').click(); 

Kaynak:

+0

İşin aslı, bu öğenin öğenin kendisini tıklamadan ateş etmesini istiyorum. Temel olarak sayfada başka bir öğeyi tıklatmak istiyorum ve bunu yapamadığım öğe ile ilişkili işlevleri tetikliyorum. Esasen sayfaya eklediğim bir düğmeyi tıklıyorum ve diğer düğmeyi tıklatıyormuş gibi davranıyorum. – plumsmugler

0

yerli DOM kendine ait HTMLElement.click() sizin için daha iyi çalışabilir jQuery'nin sürümü, farklı. İki karşılaştıran Aşağıdaki örnekler (fark kadarıyla söyleyebilirim, nasıl olaylar balonunda esas olan) Bkz: bu da sizin için işe yaramazsa

$('.trigger1a').on("mouseup", function() { 
 
    $('#foo').click(); 
 
}); 
 
$('.trigger1b').on("mouseup", function() { 
 
    $('#bar').click(); 
 
}); 
 

 
$('.trigger2a').on("mouseup", function() { 
 
    document.getElementById('foo').click(); 
 
}); 
 
$('.trigger2b').on("mouseup", function() { 
 
    document.getElementById('bar').click(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button class="trigger1a">jQuery "click" div</button> 
 
<button class="trigger1b">jQuery "click" input</button> 
 
<br> 
 
<button class="trigger2a">DOM "click" div</button> 
 
<button class="trigger2b">DOM "click" input</button> 
 
<br> 
 

 
<div class="bubblecatcher" onclick="console.log('event bubbled');"> 
 
    <div id="foo" onclick="console.log('div clicked');">Div with click event</div> 
 
    <input id="bar" onclick="console.log('input clicked');" value="input with click event"> 
 
</div>

, tüm düşebilir dönüş yolu creating your own MouseEvent ve dispatchEvent ile tetikleme (hiç yok burada jQuery dikkat edin):

function triggerClick() { 
 
    var clickEvent = new MouseEvent('click', { 
 
    'view': window, 
 
    'bubbles': true, 
 
    'cancelable': true 
 
    }); 
 
    var clickEvent = document.getElementById('foo').dispatchEvent(clickEvent); 
 
}
<div id="foo" onclick="alert('clicked');">div with click event</div> 
 

 
<button class="trigger" onclick="triggerClick()">Click this to trigger it</button>

0

Bu işe yarayacak mı?

https://jsfiddle.net/zkLbwarj/

$(document).ready(function(){ 
 

 

 
$("body").on("click","a.unreachable",function(e){ 
 
e.preventDefault(); 
 
\t $(this).text("Hammer Time!") 
 
}); 
 

 
$("body").on("click",".proxy-button",function(){ 
 

 
$(".unreachable").trigger("click").css({"background-color":"red"}); 
 

 

 
}) 
 

 

 
});
.button { 
 
    display: inline-block; 
 
    background: grey; 
 
    color: white; 
 
    border-radius:10px; 
 
    padding:10px 15px; 
 
    margin: 10px; 
 
} 
 
.proxy-button { 
 
    background: teal; 
 
}
<a class="button unreachable">Can't Touch This</a> <br> 
 
<a class="button proxy-button">Proxy Button</a>

+0

Maalesef, hayır. İlk jQuery işleviniz, işleyicide yazdığınız bir şeyi yürütür. Yürütme yetkisi olmayan fonksiyonlara ihtiyacım var. – plumsmugler

+0

Yani ateş etmek için gereken fonksiyonlar bir etkinliğe bağlı değil mi? Tetikleyicinin yaptığı budur, tarayıcı olayını manuel olarak zorlar. –

İlgili konular