JQueryを使ってマウスクリックをシミュレートする方法を理解するのに苦労しています。誰かが私が間違っていることについて私に知らせてください。
HTML:
<a id="bar" href="http://stackoverflow.com" target="_blank">Don't click me!</a>
<span id="foo">Click me!</span>
jQuery:
jQuery('#foo').on('click', function(){
jQuery('#bar').trigger('click');
});
デモ: フィドル
#fooボタンをクリックしたときに#barのクリックをシミュレートしたいのですが、これを試みても何も起こりません。私はjQuery(document).ready(function(){...})
も試しましたが成功しませんでした。
jQuery('#bar')[0].click();
を使用して、実際のDOM要素 (jQueryオブジェクトではない)上でマウスクリックをシミュレートする必要があります。代わりに.trigger()
jQueryメソッドを使用してください。
注意:DOM Level 2 .click()
は、Safariの いくつかの要素では動作しません 。回避策を使用する必要があります。
次のように.click()
を実行する前に、ちょっとしたタイムアウトイベントを設定するだけです。
setTimeout(function(){ $('#btn').click()}, 100);
これはJQueryの動作です。それがなぜこのように機能するのか私にはわかりません。リンク上のonClick関数を起動するだけです。
試してください:
jQuery(document).ready(function() {
jQuery('#foo').on('click', function() {
jQuery('#bar')[0].click();
});
});
私のデモを見てください。 http://jsfiddle.net/8AVau/1/
jQuery(document).ready(function(){
jQuery('#foo').on('click', function(){
jQuery('#bar').simulateClick('click');
});
});
jQuery.fn.simulateClick = function() {
return this.each(function() {
if('createEvent' in document) {
var doc = this.ownerDocument,
evt = doc.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, doc.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
this.dispatchEvent(evt);
} else {
this.click(); // IE Boss!
}
});
}
役に立つかもしれません:
トリガーを呼び出すコードは、イベントが呼び出されるafterに行く必要があります。
たとえば、#expense_ticketsの値が変更されたとき、およびページがリロードされたときに実行したいコードがいくつかあります。
$(function() {
$("#expense_tickets").change(function() {
// code that I want to be executed when #expense_tickets value is changed, and also, when page is reload
});
// now we trigger the change event
$("#expense_tickets").trigger("change");
})
jQueryの.trigger('click');
はこのイベントでイベントを発生させるだけで、デフォルトのブラウザアクションも発生させません。
次のJavaScriptで同じ機能をシミュレートできます。
jQuery('#foo').on('click', function(){
var bar = jQuery('#bar');
var href = bar.attr('href');
if(bar.attr("target") === "_blank")
{
window.open(href);
}else{
window.location = href;
}
});
これを試してみてください。
$('#bar').mousedown();
技術的にはこれに対する答えではありませんが、受け入れられた答え( https://stackoverflow.com/a/20928975/82028 )を使用して作成するjQuery ACFフィールドのタブの次ボタンと前ボタン
$('.next').click(function () {
$('#primary li.active').next().find('.acf-tab-button')[0].click();
});
$('.prev').click(function () {
$('#primary li.active').prev().find('.acf-tab-button')[0].click();
});
私はトップ2の答えを試してみました、私が私のファイル入力要素から "display:none"を削除するまでそれは私のために働きませんでした。それから私は.trigger()に戻り、それはwindowsのサファリでも機能しました。
結論として、display:noneを使わないでください。ファイル入力を隠すには、代わりにopacity:0を使用します。