回答編集履歴
1
改行位置の変更
test
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
**はじめに**
|
2
2
|
|
3
|
-
jQueryで同一階層に登録された複数のイベントを中断させる場合は、
|
3
|
+
jQueryで同一階層に登録された複数のイベントを中断させる場合は、
|
4
4
|
|
5
|
-
event.stopImmediatePropagation()を呼び出します。
|
5
|
+
イベントハンドラ内で event.stopImmediatePropagation()を呼び出します。
|
6
6
|
|
7
7
|
[jQuery,API Documents,event.stopImmediatePropagation](http://api.jquery.com/event.stopImmediatePropagation/)
|
8
8
|
|
@@ -10,11 +10,13 @@
|
|
10
10
|
|
11
11
|
**説明**
|
12
12
|
|
13
|
-
イベントハンドラが
|
13
|
+
イベントハンドラがfalseを返した場合「preventDefault()とstopPropagation()」が
|
14
14
|
|
15
|
-
jQuery内で独自にイベントを呼び出すループがあり、その条件に
|
15
|
+
呼ばれるのですが、jQuery内で独自にイベントを呼び出すループがあり、その条件に
|
16
16
|
|
17
|
-
あります。(一部抜粋)
|
17
|
+
ImmediatePropagationのフラグ判定があります。(一部抜粋)
|
18
|
+
|
19
|
+
|
18
20
|
|
19
21
|
[github,jQuery/src/event.js](https://github.com/jquery/jquery/blob/1de834672959636da8c06263c3530226b17a84c3/src/event.js)
|
20
22
|
|
@@ -27,6 +29,8 @@
|
|
27
29
|
event.currentTarget = matched.elem;
|
28
30
|
|
29
31
|
|
32
|
+
|
33
|
+
// このループ
|
30
34
|
|
31
35
|
j = 0;
|
32
36
|
|
@@ -76,19 +80,21 @@
|
|
76
80
|
|
77
81
|
内側のwhileで、!event.isImmediatePropagationStopped()を条件としているため、
|
78
82
|
|
79
|
-
イベントハンドラが、falseを返しただけでは中断されず同階層の次のイベントを
|
83
|
+
イベントハンドラが、falseを返しただけでは中断されず同一階層の次のイベントを
|
84
|
+
|
85
|
+
呼び出します。
|
80
86
|
|
81
87
|
|
82
88
|
|
83
89
|
**まとめ**
|
84
90
|
|
85
|
-
サンプルコードに適用した場合
|
91
|
+
サンプルコードに適用した場合は、以下のようにすると実現できるかと思います。
|
86
92
|
|
87
93
|
|
88
94
|
|
89
95
|
1)イベントハンドラで、eventオブジェクトを受け取るようにする。
|
90
96
|
|
91
|
-
2)バリデーションでエラーとなる
|
97
|
+
2)バリデーションでエラーとなる処理で、event.stopImmediatePropagation()を呼び出す。
|
92
98
|
|
93
99
|
かつ、イベントハンドラの戻り値を、falseで終了する。
|
94
100
|
|