質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

2445閲覧

JavaScript(jQuery)でtrigger(dblclick)が効かない

takushi168

総合スコア228

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

1グッド

0クリップ

投稿2018/09/03 05:41

編集2018/09/03 07:22

前提・実現したいこと

とある要素をダブルクリックしたときに発生するイベントがあり、
それをtrigger(dblclick)を利用して発生させたい
(本来は特定キーの押下時に発生させたいのですが、ここではあまり関係がなさそうなのでソースコード等では省略しています)

発生している問題・試したこと

マウスでダブルクリック操作した場合は
きちんとイベントが発生することは確認できているのですが、
「.trigger("dblclick")」で同じイベントを発生させようとした場合は
何も起こりません。

ソースコードにも記載していますが、
dblclickの代わりにclickで試した場合は問題なく動作しました。
また、「.click()」「.dblclick()」の書き方でも同様でした。

該当のソースコード

HTMLのbody内を抜粋しています。
また、このコードの場合、
ダブルクリック時にクリックイベントも併せて発生してしまいますが、
問題に関係なさそうであればスルーしてやってください。

html

1<div id="clickarea">ここをクリックorダブルクリック</div> 2 3<!-- jQuery読み込み --> 4<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 5 6<script> 7// クリック/ダブルクリックのイベント設定 8window['clickarea'] = document.getElementById("clickarea"); 9clickarea.addEventListener("click", function(){ 10 console.log("クリックされました"); 11}); 12clickarea.addEventListener("dblclick", function(){ 13 console.log("ダブルクリックされました"); 14}); 15 16// クリック/ダブルクリックのイベントを発生させる 17$("#clickarea").trigger("click"); // 動作する 18$("#clickarea").trigger("dblclick"); // 動作しない 19</script>

解決が難しい場合は少し作りを変えることも検討していますが
(イベントの内容を関数化しておいて、各処理から呼び出すなど)
開発上の諸々の都合があり、できればこの方法で解決したいと考えています。
何かご存知の方、よろしくお願いいたします。

追記

取り急ぎ、ご回答ありがとうございます。さらに検証してみます。

「ダブルクリックされました」表示で正常に動いた判定でOKです。
こちらのOSはWindows10で、確認したのは以下ブラウザです。

  • GoogleChrome 68.0
  • Firefox 61.0

解決しました

みなさま、ありがとうございました。
clickとdblclickで使い方が全く同じというわけではなかったのですね…大変勉強になりました。

今回記載していたサンプルレベルのコードではroot_jpさんの書き方ですぐに解決できました。
(実際に実装しようとしているところはまだ解決していないのですが、
どうやら更に別の問題が絡んでいて完全に別件になってしまいそうなので、
今回質問させていただいた内容としてはcloseさせていただきます)

本当に助かりました。ありがとうございます。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/09/03 05:50

dblclick動きますよ。「ダブルクリックされました」が出ればOKなんですよね?質問者さんの環境では出ないということですよね?現象が再現される環境(OS,ブラウザバージョンなど)をご提示ください。
guest

回答3

0

多分ですが、jQueryのダブルクリックイベントはネイティブイベントビルトインイベントではないのではないかと。

js

1// クリック/ダブルクリックのイベント設定 2window['clickarea'] = document.getElementById("clickarea"); 3clickarea.addEventListener("click", function(){ 4 console.log("クリックされました"); 5}); 6clickarea.addEventListener("dblclick", function(){ 7 console.log("ダブルクリックされました"); 8}); 9$("#clickarea").on("dblclick", function(){ 10 console.log("jqダブルクリックされました"); 11}); 12// クリック/ダブルクリックのイベントを発生させる 13$("#clickarea").trigger("click").trigger("click"); // 動作する 14$("#clickarea").trigger("dblclick"); // 動作しない 15/* コンソール 16(index):34 クリックされました 17(index):34 クリックされました 18(index):40 jqダブルクリックされました 19*/ 20```**動くサンプル:**[https://jsfiddle.net/zncyg3kd/](https://jsfiddle.net/zncyg3kd/) 21 22--- 23 24対応するブラウザによっては `dispatchEvent` で処理できるかも。(未検証) 25 26【イベントの作成と発火 - ウェブデベロッパーガイド | MDN27[https://developer.mozilla.org/ja/docs/Web/Guide/Events/Creating_and_triggering_events](https://developer.mozilla.org/ja/docs/Web/Guide/Events/Creating_and_triggering_events) 28 29【JavaScriptでjQueryを使わずにイベントをtriggerする】 30[https://qiita.com/ryounagaoka/items/a48d3a4c4faf78a99ae5](https://qiita.com/ryounagaoka/items/a48d3a4c4faf78a99ae5)

投稿2018/09/03 05:56

編集2018/09/03 06:02
kei344

総合スコア69400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

JavaScript

1var clickarea = $("#clickarea"); 2clickarea.on("dblclick", function() { 3 console.log("ダブルクリックされました"); 4}); 5clickarea.trigger("dblclick");

投稿2018/09/03 05:52

root_jp

総合スコア4666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

HTMLElementを拡張するとよいかもしれません

javascript

1<script> 2HTMLElement.prototype.trigger=function(eventStr){ 3 if (document.createEvent) { 4 var e = document.createEvent("HTMLEvents"); 5 e.initEvent(eventStr, true, true ); 6 return this.dispatchEvent(e); 7 } else { 8 var e = document.createEventObject(); 9 return this.fireEvent("on"+eventStr, e); 10 } 11}; 12 13window.addEventListener('DOMContentLoaded', function(e){ 14 const clickarea=document.querySelector('#clickarea'); 15 clickarea.addEventListener('click', function(){ 16 console.log("クリックされました"); 17 }); 18 clickarea.addEventListener('dblclick', function(){ 19 console.log("ダブルクリックされました"); 20 }); 21 clickarea.trigger('click'); 22 clickarea.trigger('dblclick'); 23}); 24</script> 25 26<div id="clickarea">ここをクリックorダブルクリック</div> 27

投稿2018/09/03 06:09

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問