回答編集履歴

2

調整

2018/11/26 07:46

投稿

yambejp
yambejp

スコア114833

test CHANGED
@@ -68,7 +68,7 @@
68
68
 
69
69
  # パネル内の要素をクリックしても閉じない
70
70
 
71
-
71
+ IE対応版
72
72
 
73
73
  ```javascript
74
74
 
@@ -93,6 +93,34 @@
93
93
  </style>
94
94
 
95
95
  <script>
96
+
97
+ if(!HTMLElement.prototype.closest){
98
+
99
+ HTMLElement.prototype.closest=function(selector){
100
+
101
+ var self=this;
102
+
103
+ while(p=self.parentNode){
104
+
105
+ if([].map.call(p.querySelectorAll(selector),function(x){
106
+
107
+ return x;
108
+
109
+ }).filter(function(x){
110
+
111
+ return x===self;
112
+
113
+ }).length>=1) return self;
114
+
115
+ self=p;
116
+
117
+ }
118
+
119
+ return null;
120
+
121
+ }
122
+
123
+ }
96
124
 
97
125
  window.addEventListener('DOMContentLoaded', function(e){
98
126
 

1

chousei

2018/11/26 07:46

投稿

yambejp
yambejp

スコア114833

test CHANGED
@@ -63,3 +63,77 @@
63
63
  </div>
64
64
 
65
65
  ```
66
+
67
+
68
+
69
+ # パネル内の要素をクリックしても閉じない
70
+
71
+
72
+
73
+ ```javascript
74
+
75
+ <style>
76
+
77
+ .panel {
78
+
79
+ border: 1px solid #000;
80
+
81
+ padding: 15px;
82
+
83
+ width: 320px;
84
+
85
+ }
86
+
87
+ .panel:not(.active) {
88
+
89
+ display:none;
90
+
91
+ }
92
+
93
+ </style>
94
+
95
+ <script>
96
+
97
+ window.addEventListener('DOMContentLoaded', function(e){
98
+
99
+ var input = document.querySelector('#example');
100
+
101
+ var panel = document.querySelector('#panel');
102
+
103
+ input.addEventListener('focus', function(){
104
+
105
+ panel.classList.add('active');
106
+
107
+ });
108
+
109
+ document.addEventListener('click', function(e){
110
+
111
+ var t=e.target;
112
+
113
+ if(t.id!=="example" && !t.closest("#panel")){
114
+
115
+ console.log(t.id);
116
+
117
+ panel.classList.remove('active');
118
+
119
+ }
120
+
121
+ });
122
+
123
+ });
124
+
125
+ </script>
126
+
127
+ <input id="example">
128
+
129
+ <div id="panel" class="panel" style="">
130
+
131
+ <button data-text="foo">foo</button>
132
+
133
+ <button data-text="bar">bar</button>
134
+
135
+ <input type="text">
136
+
137
+ </div>
138
+
139
+ ```