2016-03-26 14 views
1

JQueryの.trigger()機能を理解するのに少し助けが必要です。私はまったく不可能なソースコードでWebブラウザプラグインを使って作業しています。 main.jsファイルには、すべてが一緒に実行される何千もの行間の1行のコードが含まれているため、ほとんど判読できません。したがって、プラグイン内の関数に直接アクセスすることは選択肢ではありません。ソースコードにアクセスできない要素でJQueryの.trigger()を使用する方法

プラグイン内のブラウザに表示されるボタンのように機能するdivをトリガーする必要があります。私は要素のIDを持っているので、jQuery経由でアクセスすることができます。私には、そのdivに関連する機能を起動させる最も簡単な方法は、そのdiv要素に.trigger("click")を使用することです。しかし、ドキュメンテーションに基づいており、私はそれを周りツーリング、あなたがターゲットのdivを設定した場合.trigger("click")のみ動作ようだ:要素上で動作するように.trigger("click")を取得する方法はあります

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

その私は本当にすることができますそうでなければ操作しますか?

+0

あなたはどのブラウザ用のプラグインを書いていますか? –

+0

Firefoxで作業していますが、Chromeでも同じことができます。 – plumsmugler

答えて

0

次の方法で試しましたか?

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

出典:

+0

要素自体をクリックせずにこの要素を起動させたいのですが。私は基本的にページ上の別の要素をクリックして、アクセスすることができない要素に関連付けられている関数を起動します。基本的に私はページに挿入するボタンをクリックし、他のボタンをクリックしたように動作します。 – plumsmugler

0

ネイティブDOMが持つ独自のHTMLElement.click()あなたのために良い仕事かもしれjQueryのバージョンとは異なり。 (違いは私の知る限り、どのようなイベントバブルで主にある)2を比較し、以下の例を参照してください。

$('.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>

それはどちらかあなたのために動作しない場合は、あなたがすべて落ちる可能性帰り道creating your own MouseEventにして(ここでは全くのjQueryを注意していない)dispatchEventでそれをトリガー:

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

これは使えますか?

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

残念ながら、いいえ。最初のjQuery関数は、ハンドラ内で記述したものを実行します。私は実行するためのアクセス権がない機能が必要です。 – plumsmugler

+0

だから、発砲する必要がある機能はイベントに付随していないと言っていますか?これがトリガーの機能で、手動でブラウザー・イベントを強制します。 –

関連する問題