Jó Böngészőtámogatás tri-state négyzetet?

szavazat
0

Hé srácok, keresem egy szép tri-state négyzetet vezérlő JS? Van valami ajánlani nekem?

Az államok keresem a

  1. kockás
  2. Nem ellenőrzött
  3. Közömbös (nem ellenőrizték / bejelölve)
A kérdést 29/07/2009 22:16
a forrás felhasználó
Más nyelveken...                            


6 válasz

szavazat
1

Használja rádió gombjait.

<input type="radio" name="tristate" value="checked" />Checked
<input type="radio" name="tristate" value="unchecked" />Unchecked

Ha egyik sem, ha a rádiók be vannak kapcsolva, akkor már a harmadik „közömbös”, vagy null állapot.

Válaszolt 29/07/2009 22:19
a forrás felhasználó

szavazat
1

Érdemes lehet nézni ExtJS.

Van egy nagy közösség, amely gyakran épít dolgok, mint ez, és biztos vagyok benne, ha googled egy talán jön. Tulajdonképpen itt megy akkor lehet, hogy néhány változtatást ezt, és hogy ez a munka, hogyan szeretné:

http://extjs.net/forum/showthread.php?t=28096

Remélem ez segít!

Válaszolt 29/07/2009 22:20
a forrás felhasználó

szavazat
0

Ha több kell, mint a két állam, majd a 3 rádió gomb.

Ne gondold, ha a felhasználó nem választott semmit, hogy azt a harmadik állam. Mi van, ha a felhasználó hiányzott a kérdést együtt, vagy a hit nyújt be véletlenül?

Ha azt szeretnénk, 3 állapotot, majd 3 állapotot!

Válaszolt 29/07/2009 22:23
a forrás felhasználó

szavazat
0

Használja HTML5 meghatározatlan bemeneti elemek .

Válaszolt 28/09/2012 23:49
a forrás felhasználó

szavazat
1

Azt fejlesztette ki ezt a megoldást, miközben dolgozik a projektben. Ez használ a határozatlan állapotot jelölőnégyzetek (olyan tulajdonság, amely nem lehet hozzáférni / beállítani jelölés). Az én például már csak egy szinten egymásba, de lehet egymásba végtelenségig, hogy a csoportok és alcsoportok is un, minden, vagy részben kiválasztott.

Az alap szerkezete körül forog manipulálni a határozatlan tulajdonság, mint ez:

<input type="checkbox" value="HasFavoriteColor" name="FavoriteColor" id="myCheckBox" />
<input type="hidden" id="FavoriteColorState" name="FavoriteColorState" /><!-- potential values: 0, 1, -1 -->

<script type="text/javascript">
    //using JQuery
    $("#myCheckBox").prop("indeterminate", true);

    //using pure javascript
    document.getElementById("myCheckBox").setAttribute("indeterminate", true);
</script>

Én használtam egy select-mind itt a példa, de akkor lehetne használni, de mindössze egy egyéni jelölőnégyzetet. Fontos tudni, hogy ez nem kommunikál állapot utáni vissza a szerver. A négyzetet, hogy írt is igaz / hamis, így meghatározatlan csak érinti UI. Ha meg kell, hogy tegye vissza értéket, akkor meg kell kötni a határozatlan állapotot valamilyen rejtett mező is fennállnak az értéket.

Az inkább a határozatlan állapotot, lásd a következő forrásokat:

Itt egy működő példa (külső hegedű): http://jsfiddle.net/xDaevax/65wZt/

Munkapélda (Stack részlet):

var root = this;
root.selectedCount = 0;
root.totalCount = 0;
root.percentageSelected = 0.0;
root.holdTimer = 0;
jQuery.fn.customSelect = {
    State: 0,
    NextState: function () {
        this.State += 1;
        if (this.State > 2) {
            this.State = 0;
        } // end if
    } // end object
};

function checkAllToggle(parent, toggle) {
    if (parent != null && parent != undefined) {
        parent.find("input[type='checkbox']").prop("checked", toggle);
        for (var i = 0; i < parent.find("input[type='checkbox']").length; i++) {
            $(document).trigger("item-selected", {
                IsSelected: $(parent.find("input[type='checkbox']")[i]).prop("checked")
            });
        } // end for loop
    } // end if
} // end function checkAll
var fadeTimer = setInterval(function () {
    if (root.holdTimer > 0) {
        root.holdTimer -= 1;
    } else {
        root.holdTimer = -2;
    } // end if/else
    if (root.holdTimer == -2) {
        $(".options-status").fadeOut("easeOutBack");
        root.holdTimer = -1;
    } // end if/else
}, 50);
$(function () {
    root.totalCount = $(document).find(".options-list input[type='checkbox']").length;
    $(document).bind("select-state-change", function (e, data) {
        switch (data.State) {
            case 0:
                data.Target.prop("checked", false);
                data.Target.prop("indeterminate", false);
                checkAllToggle($(".options-list"), false);
                break;
            case 1:
                data.Target.prop("indeterminate", true);
                e.preventDefault();
                break;
            case 2:
                data.Target.prop("checked", true);
                data.Target.prop("indeterminate", false);
                checkAllToggle($(".options-list"), true);
                break;
        }

    });
    $(document).bind("item-selected", function (e, data) {
        root.holdTimer = 50;
        if (data != null && data != undefined) {
            if (data.IsSelected) {
                root.selectedCount += 1;
            } else {
                root.selectedCount -= 1;
            } // end if/else
            if (root.selectedCount > root.totalCount) {
                root.selectedCount = root.totalCount;
            } // end if
            if (root.selectedCount < 0) {
                root.selectedCount = 0;
            } // end if
            root.percentageSelected = (100 * (root.selectedCount / root.totalCount));
            root.percentageSelected < 50 && root.percentageSelected >= 0 ? $(".options-status").removeClass("finally-there").removeClass("almost-there").addClass("not-there", 200) : false;
            root.percentageSelected < 100 && root.percentageSelected >= 50 ? $(".options-status").removeClass("not-there").removeClass("finally-there").addClass("almost-there", 200) : false;
            root.percentageSelected == 100 ? $(".options-status").removeClass("not-there").removeClass("almost-there").addClass("finally-there", 200) : false;
            $(".options-status .output").text(root.percentageSelected + "%");
            setTimeout(function () {
                $(".options-status").fadeIn("easeInBack");
            }, 100);
        } // end if
    });
    $("#select-all").click(function (e) {
        var checkbox = $(this);
        if (checkbox.prop("checked") == true) {
            checkbox.customSelect.State = 2;
        } else {
            checkbox.customSelect.State = 0;
        } // end if/else
        $(document).trigger("select-state-change", {
            State: checkbox.customSelect.State,
            Target: $("#select-all")
        });
    });
    $("input[name='options']").each(function () {
        $(this).click(function () {
            if ($(this).prop("checked") == true) {
                $(document).trigger("item-selected", {
                    IsSelected: true
                });
                if ($(this).parent().parent().find("input[type='checkbox']:checked").length == $(this).parent().parent().find("input[type='checkbox']").length) {
                    $(document).trigger("select-state-change", {
                        State: 2,
                        Target: $("#select-all")
                    });
                } else {
                    $(document).trigger("select-state-change", {
                        State: 1,
                        Target: $("#select-all")
                    });
                } // end if/else
            } else {
                $(document).trigger("item-selected", {
                    IsSelected: false
                });
                if ($(this).parent().parent().find("input[type='checkbox']:checked").length <= 0) {
                    $(document).trigger("select-state-change", {
                        State: 0,
                        Target: $("#select-all")
                    });
                } else {
                    $(document).trigger("select-state-change", {
                        State: 1,
                        Target: $("#select-all")
                    });
                } // end if/else
            } // end if/else
        });
    });
});
body {
    font-family: Helvetica, Verdana, Sans-Serif;
    font-size: small;
    color: #232323;
    background-color: #efefef;
    padding: 0px;
    margin: 0px;
}
H1 {
    margin-top: 2px;
    text-align: center;
}
LEGEND {
    margin-bottom: 6px;
}
.content-wrapper {
    padding: 2px;
    margin: 3px auto;
    width: 100%;
    max-width: 500px;
    min-width: 250px;
}
.wrapper {
    padding: 3px;
    margin: 2px;
}
.container {
    border-right: solid 1px #788967;
    border-bottom: solid 1px #677867;
    border-top: solid 1px #89ab89;
    border-left: solid 1px #89ab89;
}
.rounded {
    border-radius: 2px;
}
.contents {
    background: linear-gradient(rgba(255, 255, 255, 1), rgba(180, 180, 180, .2));
}
.header {
    padding: 4px;
    border: solid 1px #000000;
    background-color: rgba(200, 200, 230, .8);
    font-size: 123%;
    background-image: linear-gradient(rgba(220, 220, 255, .8), rgba(200, 200, 230, .8));
}
#options-chooser {
    margin-top: 30px;
    display: block;
}
#options-chooser .options-list > LABEL {
    display: table-row;
    height: 26px;
}
.red {
    color: red;
}
.blue {
    color: blue;
}
.green {
    color: green;
}
.black {
    color: black;
}
.options-status {
    float: right;
    right: 3%;
    clear: both;
    display: none;
    margin-top: -20px;
}
.output {
    font-weight: bold;
}
.not-there {
    border-color: rgba(190, 190, 190, .3);
    background-color: rgba(190, 190, 190, .1);
}
.almost-there {
    border-color: rgba(220, 220, 50, .6);
    background-color: rgba(220, 220, 50, .3);
}
.finally-there {
    border-color: rgba(50, 190, 50, .3);
    background-color: rgba(50, 190, 50, .1);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.js"></script>
<div class="content-wrapper">
    <div class="wrapper container rounded">
        <div class="contents">
             <h1 class="header rounded">Partial Select All Example</h1>

            <p>This example demonstrates how to implement a tri-state checkbox with options.</p>
            <form name="options-chooser" id="options-chooser" method="post">
                <fieldset class="rounded options">
                    <legend class="rounded header">Options
                        <input type="checkbox" value="options-all" name="selectAll" id="select-all" title="Select All" />
                    </legend> <span class="options-status rounded container wrapper">Items Selected: <span class="output"></span></span>
                    <div class="options-list">
                        <label class="blue">
                            <input type="checkbox" name="options" value="1" />Blue</label>
                        <label class="green">
                            <input type="checkbox" name="options" value="2" />Green</label>
                        <label class="red">
                            <input type="checkbox" name="options" value="3" />Red</label>
                        <label class="black">
                            <input type="checkbox" name="options" value="4" />Black</label>
                    </div>
                </fieldset>
            </form>
        </div>
    </div>
</div>

Válaszolt 27/06/2014 15:00
a forrás felhasználó

szavazat
0

Van egy megoldás segítségével natív négyzetet, és a határozatlan tulajdon és tárolására Egyedi tulajdonság a négyzetet, hogy rögzítse a jelenlegi állapot eléréséhez hatékony hármas állapotban jelölőnégyzetet.

Ez a megoldás már tesztelték is a legújabb Chrome és a Firefox és a króm (nw.js) Linux és IE 11, Firefox és a Chrome Windohs.

Én küldte ezt a megoldást, hogy JSFiddle .

Itt látható a közüzemi singleton szoktam:

tscb$ = {
     STATE_UNCHECKED: 0
    ,STATE_CHECKED: 1
    ,STATE_INDETER: 2
    ,setState:  function(o,iState){
        var t=this;
        if(iState==t.STATE_UNCHECKED){
            o.indeterminate=false; o.checked=false;
        } else if(iState==t.STATE_CHECKED){
            o.indeterminate=false; o.checked=true;
        } else if(iState==t.STATE_INDETER){
            o.checked=false; o.indeterminate=true;
        } else {
            throw new Error("Invalid state passed: `"+iState+"`")
        }
        o.setAttribute("tscbState", iState);
    }
    // Event to call when the cb is clicked to toggle setting.
    ,toggleOnClick:  function(o){
        var t=this, iNextState=t.getNextState(o)
        if(iNextState==t.STATE_UNCHECKED){
            o.checked=false;
        } else if(iNextState==t.STATE_CHECKED){
            o.checked=true;
        } else if(iNextState==t.STATE_INDETER){
            o.indeterminate=true;
        }
        o.setAttribute("tscbState", iNextState);
    }
    // For retrieval of next state 
    ,getNextState: function(o){
        var t=this, iState=t.getState(o)
        if(iState==t.STATE_UNCHECKED){
            return t.STATE_INDETER;
        } else if(iState==t.STATE_CHECKED){
            return t.STATE_UNCHECKED;
        } else if(iState==t.STATE_INDETER){
            return t.STATE_CHECKED;
        }
    }
    ,getState: function(o){
        return parseInt(o.getAttribute("tscbState"))
    }

}

Használat:

  • tscb $ .setState () lehet inicializálni vagy felülbírálhatja a beállítást egy négyzetet
  • tscb $ .toggleOnClick () akkor használjuk, amikor az elem kattintott váltani a következő állapotra
  • tscb $ .getState (), hogy megkaphatja a jelenlegi állapot
  • tscb $ .getNextState (), hogy megkaphatja a következő állapotot

A csodálatos, mennyire hatékony egy hármas állapotban négyzetet lehet a tartása egy UI kompakt miközben egyedülálló szűrési funkciókat. A nagyon hatékony dinamikus keresési eredmény szűrés esetében a szűrő lehet igaz / hamis / Ki csak egy vezérlő

Válaszolt 19/03/2015 00:17
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more