いくつかの項目を含むHTMLの単純な選択フォームがあります。ユーザーが選択できるアイテムの数を制限するためにJavaScriptを使用しています。
HTMLには、次のコードがあります。
<select name="category" multiple id="category" onchange="checkMaxSelected(this, 3, 'Max number of categories you can select: ');">
<option value="orange">orange</option>
<option value="apple">apple</option>
<option value="banana">banana</option>
<option value="pear">pear</option>
<option value="strawberry">strawberry</option>
</select>
3つの変数をjavascript関数checkMaxSelectedに渡します。
- フォームを選択する(つまりこれ)
- ユーザーがフォームで実行できる選択の最大数(私の場合は3)
- 警告ボックスに表示されるエラーメッセージ。
JSコードは次のとおりです。
function checkMaxSelected (select, maxSelected, displ_error_nummaxcat) {
if (!select.storeSelections) {
select.storeSelections = new Array(select.options.length);
select.selectedOptions = 0;
}
for (var i = 0; i < select.options.length; i++) {
console.log('select.options[i].selected: '+select.options[i].selected+' select.storeSelections[i]: '+select.storeSelections[i]);
if (select.options[i].selected &&
!select.storeSelections[i]) {
if (select.selectedOptions < maxSelected) {
select.storeSelections[i] = true;
select.selectedOptions++;
}
else {
alert(displ_error_nummaxcat + maxSelected);
console.log('HERE I SHOW ALERT!');
select.options[i].selected = false;
}
}
else if (!select.options[i].selected &&
select.storeSelections[i]) {
select.storeSelections[i] = false;
select.selectedOptions--;
}
}
};
このソリューションはFirefox、Safari、IEで完全に機能しますが、Chromeでは機能しません。なんで?
どんな助けでも大歓迎です。前もって感謝します。
追加情報:
私はfirefoxとChromeの両方でfirebugを使用してデバッグしようとして無駄にしています。Firefoxでは、選択フォームの最初の項目を選択すると、firebugコンソールが表示されます。
select.options[i].selected: true select.storeSelections[i]: undefined
select.options[i].selected: false select.storeSelections[i]: undefined
select.options[i].selected: false select.storeSelections[i]: undefined
select.options[i].selected: false select.storeSelections[i]: undefined
select.options[i].selected: false select.storeSelections[i]: undefined
(どちらが正しい)。
Chromeでの同じアクション(つまり、最初のアイテムの選択)は、エラーメッセージを直接トリガーします。ChromeでのFirebugコンソールの出力は次のとおりです。
select.options[i].selected: true select.storeSelections[i]: undefined
HERE I SHOW ALERT!
select.options[i].selected: false
select.options[i].selected: false select.storeSelections[i]: undefined
select.options[i].selected: false select.storeSelections[i]: undefined
select.options[i].selected: false select.storeSelections[i]: undefined
select.options[i].selected: false select.storeSelections[i]: undefined