を、あなたがそもそもの問題を抱えている理由は、私はより完全に答えてみましょう:
最近のブラウザは、あなたがそうで/Ctrlキー/Altキー Shiftキーなどを開催するかどうか、あなたがクリックしたマウスボタンのようなものに基づいて、リンクのためのさまざまなアクションを取ります。たとえば、Chromeでは、左クリックする代わりにリンクをクリックすると、ブラウザは自動的に新しいタブでウィンドウを開きます。
.click()
を使用すると、jQueryはあなたがクリックした「方法」について仮定しなければなりません。そして、あなたの場合は正しい動作ではありません。問題を解決するには、ブラウザに「正しい」設定をMouseEvents
設定の形式で指定する必要があります。それを修正する方法の短い議論への今
、:あなたはパラメータなしでjQueryの.click()
イベントを使用している場合は
、これは問題の要素の「クリックを偽造」は、実際にはありません。その代わり、http://api.jquery.com/click/でjQueryのドキュメントによると:
.click()
は、引数なしで呼び出され
...、それは.triggerのショートカットです(「クリック」)
これは、あなたが発火するときことを意味$('#div1').click()
- 'click'
イベントの実際のjQueryハンドラがない場合、デフォルトの処理が行われます。だから、これらの2つの場合を考えてみます。
ケース1:それのハンドラがないため、この最初のシナリオでは
<a id='myLink' href='/some/link/'>Click me!</a>
<script type='text/javascript'>
$('#myLink').click();
</script>
を、.click()
呼び出しは、何もしません。イベントはトリガーされますが、それを捕まえて応答するものはありません。a
タグのデフォルトの処理が使用され、ユーザーは/some/link/
になります。また、マウスボタンやその他のパラメーターを指定していないため、デフォルトです。
ケース2:このシナリオでは
<a id='myLink' href='/some/link/'>Click me!</a>
<script type='text/javascript'>
$('#myLink').bind('click', function (ev) {
ev.preventDefault();
ev.stopPropagation();
alert('you clicked me!');
}).click();
</script>
click
ハンドラが作成されたため、ユーザーがリンクをクリックしたときに、 - ev.preventDefault()
とev.stopPropagation()
呼び出しはoccuringから取り扱いデフォルト、およびアラートを停止します解雇される。
しかし、この時点でMouseEvents
を表すev
オブジェクトがあり、必要に応じて設定を変更することができます。たとえば、次の操作を行うことができます:
ev.altKey = true; // Held Alt
ev.button = 1; // Middle Mouse Button
これらの設定は、イベントを処理するデフォルトの方法を変更します。
オルタナティブ、非jQueryのソリューション
また、本当に次のコードを適応させることにより、ボタンクリックをシミュレートすることができます。あなたがアンカー/スパンをマウスクリックしたことを信じるように
この意志実際に偽のブラウザを - :
function fakeClick(event, anchorObj) {
if (anchorObj.click) {
anchorObj.click()
} else if(document.createEvent) {
if(event.target !== anchorObj) {
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
var allowDefault = anchorObj.dispatchEvent(evt);
// you can check allowDefault for false to see if
// any handler called evt.preventDefault().
// Firefox will *not* redirect to anchorObj.href
// for you. However every other browser will.
}
}
}
(および選択した答えを見てHow can I simulate a click to an anchor tag?より完全な実施のために、でオリジナルのポストを参照してください)/etcの設定を変更することができます。ただし、ブラウザのデフォルトのハンドラーと同じ方法で、イベントを最初から構築することで、いくつかの設定を上書きすることができます。しかし、私はこのアプローチを提案していません。クロスブラウザー・アプリケーションを壊す可能性が非常に高く、すべてのパラメーターがマップされていることを理解する必要があります。
「_私は問題の詳細を知ることはできません」...しかし、ここではこれが何をしているのですか? '.click()'がクリックを引き起こすので、他の何かのような音は働いていません。 – Mathletics
ボタンがクリックされたときにボタンがフォームを送信している可能性があります(これは 'click'で動作するかどうか覚えていません)か、' mouseup'や 'mousedown'イベントを' click'の代わりに処理するかもしれません。 – Ryan
@Shannon:私の答えがあなたにとって有益だった場合は、それを正解として受け入れてください。この質問に解決済みとマークすることができます。それでも問題が解決しない場合は、私は援助したいと思います。ありがとう! –