4

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;
        }


    });
});
4

1 に答える 1

1

現在、選択を禁止しています。最初のオプションが選択されている場合は選択を解除し、他のオプションが選択されている場合は選択を解除し、次のことを試してください。

$('select').change(function() {
    if (this.selectedIndex === 0) {
        $('option:gt(0)', this).prop('selected', false);
    } else {
        $('option:first', this).prop('selected', false);
    }
});

http://jsfiddle.net/LynCV/

于 2012-11-01T17:46:59.533 に答える