teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

ついか

2018/03/29 09:20

投稿

yambejp
yambejp

スコア117867

answer CHANGED
@@ -101,4 +101,68 @@
101
101
  <option value="もも">もも</option>
102
102
  <option value="バナナ">バナナ</option>
103
103
  </select>
104
+ ```
105
+
106
+ # 補足
107
+ デフォルト値がある場合の処理
108
+
109
+ ```javascript
110
+ <script>
111
+ window.addEventListener('DOMContentLoaded', function(e){
112
+ var nodes=document.querySelectorAll('.s');
113
+ Array.prototype.forEach.call(nodes,function(n){
114
+ n.trigger=function(eventStr){
115
+ if (document.createEvent) {
116
+ var e = document.createEvent("HTMLEvents");
117
+ e.initEvent(eventStr, true, true );
118
+ return this.dispatchEvent(e);
119
+ } else {
120
+ var e = document.createEventObject();
121
+ return this.fireEvent("on"+eventStr, e);
122
+ }
123
+ };
124
+ n.addEventListener('change',function(){
125
+ Array.prototype.forEach.call(nodes,function(n){
126
+ Array.prototype.forEach.call(n.querySelectorAll('option:disabled'),function(n){
127
+ n.disabled=false;
128
+ });
129
+ });
130
+ Array.prototype.map.call(nodes,function(n){
131
+ return n.value;
132
+ }).filter(function(v){
133
+ return v!=="";
134
+ }).forEach(function(v){
135
+ Array.prototype.forEach.call(nodes,function(n){
136
+ if(n.value!==v) n.querySelector('option[value='+v+']').disabled=true;
137
+ });
138
+ });
139
+ });
140
+ });
141
+ nodes[0].trigger('change');
142
+ });
143
+ </script>
144
+ <select name="s1" class="s">
145
+ <option value="">------</option>
146
+ <option value="りんご">りんご</option>
147
+ <option value="みかん">みかん</option>
148
+ <option value="いちご" selected>いちご</option>
149
+ <option value="バナナ">バナナ</option>
150
+ <option value="もも">もも</option>
151
+ </select>
152
+ <select name="s2" class="s">
153
+ <option value="">------</option>
154
+ <option value="もも">もも</option>
155
+ <option value="みかん">みかん</option>
156
+ <option value="バナナ">バナナ</option>
157
+ <option value="いちご">いちご</option>
158
+ <option value="りんご" selected>りんご</option>
159
+ </select>
160
+ <select name="s3" class="s">
161
+ <option value="">------</option>
162
+ <option value="いちご">いちご</option>
163
+ <option value="みかん" selected>みかん</option>
164
+ <option value="りんご">りんご</option>
165
+ <option value="もも">もも</option>
166
+ <option value="バナナ">バナナ</option>
167
+ </select>
104
168
  ```

2

追記

2018/03/29 09:20

投稿

yambejp
yambejp

スコア117867

answer CHANGED
@@ -49,4 +49,56 @@
49
49
  <option value="もも">もも</option>
50
50
  </select>
51
51
 
52
+ ```
53
+
54
+ # valueの比較バージョン
55
+
56
+ ```javascript
57
+ window.addEventListener('DOMContentLoaded', function(e){
58
+ var nodes=document.querySelectorAll('.s');
59
+ Array.prototype.forEach.call(nodes,function(n){
60
+ n.addEventListener('change',function(){
61
+ Array.prototype.forEach.call(nodes,function(n){
62
+ Array.prototype.forEach.call(n.querySelectorAll('option:disabled'),function(n){
63
+ n.disabled=false;
64
+ });
65
+ });
66
+ Array.prototype.map.call(nodes,function(n){
67
+ return n.value;
68
+ }).filter(function(v){
69
+ return v!=="";
70
+ }).forEach(function(v){
71
+ Array.prototype.forEach.call(nodes,function(n){
72
+ if(n.value!==v) n.querySelector('option[value='+v+']').disabled=true;
73
+ });
74
+ });
75
+ });
76
+ });
77
+ });
78
+ ```
79
+ ```HTML
80
+ <select name="s1" class="s">
81
+ <option value="">------</option>
82
+ <option value="りんご">りんご</option>
83
+ <option value="みかん">みかん</option>
84
+ <option value="いちご">いちご</option>
85
+ <option value="バナナ">バナナ</option>
86
+ <option value="もも">もも</option>
87
+ </select>
88
+ <select name="s2" class="s">
89
+ <option value="">------</option>
90
+ <option value="もも">もも</option>
91
+ <option value="みかん">みかん</option>
92
+ <option value="バナナ">バナナ</option>
93
+ <option value="いちご">いちご</option>
94
+ <option value="りんご">りんご</option>
95
+ </select>
96
+ <select name="s3" class="s">
97
+ <option value="">------</option>
98
+ <option value="いちご">いちご</option>
99
+ <option value="みかん">みかん</option>
100
+ <option value="りんご">りんご</option>
101
+ <option value="もも">もも</option>
102
+ <option value="バナナ">バナナ</option>
103
+ </select>
52
104
  ```

1

調整

2018/03/29 09:00

投稿

yambejp
yambejp

スコア117867

answer CHANGED
@@ -29,17 +29,24 @@
29
29
  <option value="りんご">りんご</option>
30
30
  <option value="みかん">みかん</option>
31
31
  <option value="いちご">いちご</option>
32
+ <option value="バナナ">バナナ</option>
33
+ <option value="もも">もも</option>
32
34
  </select>
33
35
  <select name="s2" class="s">
34
36
  <option value="">------</option>
35
37
  <option value="りんご">りんご</option>
36
38
  <option value="みかん">みかん</option>
37
39
  <option value="いちご">いちご</option>
40
+ <option value="バナナ">バナナ</option>
41
+ <option value="もも">もも</option>
38
42
  </select>
39
43
  <select name="s3" class="s">
40
44
  <option value="">------</option>
41
45
  <option value="りんご">りんご</option>
42
46
  <option value="みかん">みかん</option>
43
47
  <option value="いちご">いちご</option>
48
+ <option value="バナナ">バナナ</option>
49
+ <option value="もも">もも</option>
44
50
  </select>
51
+
45
52
  ```