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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

17306閲覧

【Jquery】イベント「click」と「blur」が同時に発生した時、「click」の処理を優先させたい

sanset

総合スコア186

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/01/17 02:26

タイトルの通り、「click」と「blur」イベントが同時に発生した時、blurが優先的に呼び出されますが、「click」の処理を先に行いたいです。

以下は処理の確認サンプルです。

HTML

1<!doctype html> 2<html> 3<head> 4<meta charset="utf-8"> 5<meta name="robots" content="noindex, nofollow"> 6<title>サンプル</title> 7 8<style> 9.kana{ 10 background-color:#ccc; 11 cursor:pointer; 12} 13</style> 14 15</head> 16<body> 17 18<input type="text" id="kanahenkan" /><br> 19<span class="kana"></span> 20 21<script src="http://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> 22<script> 23$(function(){ 24 25 //入力したらカタカナ候補を出す 26 $('#kanahenkan').on('input', function(evnt){ 27 $('.kana').text($(this).val().toKatakanaCase()); 28 }); 29 30 //クリックしたらカタカナを代入 31 $('.kana').on('click', function(){ 32 $('#kanahenkan').val($(this).text()); 33 }); 34 35 //フォーカスが外れたらカタカナを消す 36 $('#kanahenkan').on('blur', function(){ 37 $('.kana').text(''); 38 }); 39 40 // kanaXs 41 // https://github.com/shogo4405/KanaXS.git 42 String.prototype.toKatakanaCase=function(){for(var a,b=this.length,c=[];b--;)a=this.charCodeAt(b),c[b]=12353<=a&&12438>=a?a+96:a;return String.fromCharCode.apply(null,c)};String.prototype.toHankakuCase=function(){for(var a,b=this.length,c=[];b--;)switch(a=c[b]=this.charCodeAt(b),!0){case 65281<=a&&65374>=a:c[b]-=65248;break;case 12288==a:c[b]=32}return String.fromCharCode.apply(null,c)}; 43 44}); 45</script> 46</body> 47</html>

フォームに入力したヒラガナのカタカナ候補を下に表示させ、クリックしたらそのカタカナがフォームに代入されるといったサンプルです。
(実際に書いているコードとは異なりますが、やりたいことは同じです)

サンプル画像

このhtmlをコピペした頂くと分かりやすいのですが、実際にカタカナをクリックすると、代入の前にblurの処理が先に走ってしまい、代入することができません。

対応策として、

HTML

1$('#kanahenkan').on('blur', function(){ 2 setTimeout(function(){ 3 $('.kana').text(''); 4 }, 200); 5});

と、処理を遅らせることで何とか理想の動きが出来ましたが、非常に気持ち悪く、どの環境でも実行できるか怪しいので、できればこういった書き方は使いたくないです。(100では無理でした)

こういったケースで、clickイベントを先に行うにはどのようにすべきでしょうか?
どなたかご教示お願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

clickではなく、mousedownではだめですか?

$('.kana').on('mousedown', function(){ $('#kanahenkan').val($(this).text()); });

投稿2017/01/17 02:42

namimon

総合スコア726

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

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

sanset

2017/01/17 03:59

ありがとうございます。マウスダウンにすることで先に代入することができました。
guest

0

「click」と「blur」イベントが同時に発生した時

とございますが、実際には同時ではありません。

click$('.kana')に対して、
blur$('#kanahenkan')に対して、
それぞれハンドリングされていますので、$('.kana')をクリックすると$('#kanahenkan')からフォーカスが外れ、blurイベントが発火します。

とどのつまり、$('.kana')をクリックしなかった場合でも、$('#kanahenkan')からフォーカスが外れるとblurが発火します。
(ご理解されているかと存じますが念のため)

投稿2017/01/17 02:42

mri0815

総合スコア429

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

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

sanset

2017/01/17 03:50

ありがとうございます。 はい、それぞれ別の要素でイベントが働いていることは承知しております。 $('.kana').text('');をクリックイベントに入れられたら楽なのですが、フォーカスが外れた際に消しておきたかったのでご質問させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問