iPad で選択オプションの選択と選択解除に問題があります。
「Shop by Color」は値のないオプションです。このオプションを選択すると、すべてのアイテムが表示されます。他のオプションを選択すると、そのカテゴリのアイテムが表示されます。
私が欲しいのは:
- .othervalue オプションをクリックすると、「Shop by Color」(.firstvalue) の選択が解除され、クリックされたオプションが選択されます。
- .firstvalue オプションをクリックすると、それが選択され、他のすべてのオプション (.othervalue) が選択解除されます。
これが私が試したものです:
$(document).ready(function() {
$('select').change(function() {
var $this = $(this);
if($("option.firstvalue").is(":selected")) {
$this.find('option:first').attr('selected', false);
} else {
$this.find('option:gt(0)').attr('selected', false);
}
});
});
** 完全なコードはhttp://jsfiddle.net/GNpzq/にあります**
$('select').change() を使用する必要があると思います。これは、iPad がそのイベントを適切にトリガーするためですが、よくわかりません。
誰でもこのコードで私を助けることができますか?
ありがとう!
編集:これは問題を解決したコードです。おそらく誰かが使用するでしょう。
$(function() {
// select and deselect default OPTION for filters
var firstSelectState = new Array;
var optionsArray = new Array;
$('select').change(function() {
var id = this.id;
if (!id) {
id = Math.round(Math.random()*99999);
this.id = id;
}
if (typeof(firstSelectState[id])=="undefined") firstSelectState[id] = this.options[0].selected;
var tmpOptionsArray = new Array();
for (var i = 1; i<this.options.length; i++) {
tmpOptionsArray[i] = this.options[i].selected;
}
if (typeof(optionsArray[id])=="undefined") {
optionsArray[id] = tmpOptionsArray;
}
var firstSelected = (firstSelectState[id]!=this.options[0].selected);
var otherSelected = false;
for (var i = 1; i<this.options.length; i++) {
if (optionsArray[id][i]!=tmpOptionsArray[i]) {
otherSelected = true;
break;
}
}
optionsArray[id] = tmpOptionsArray;
if (firstSelected && !otherSelected) {
for (var i = 1; i<this.options.length; i++) {
this.options[i].selected = false;
}
} else {
this.options[0].selected = false;
firstSelectState[id] = false;
}
});
});