jquery現実マルチステートコントロール(status&power(2,0)=power(2,0)

13643 ワード

データベース表の設計の時、とても多くの状態の需要があって、例えば招聘の職位は同時に武漢、広州、上海に発表する必要があります
実装方法はいろいろありますが、職階表にint型フィールドを作成して複数の状態を保存することを選択しました.これはいくつかのアルゴリズムに関連しています.武漢と広州の職位のsql文を検索するには、次のようにします.
select * from    
where 1 = 1
and (status & power(2,3)) = power(2,3) --  
and (status & power(2,1)) = power(2,1) --  

以下は対応するコントロールです.
<p><input type="text" multi_status="  ,   ,   ,  ,  " />p>
<p><input type="text" multi_status="  ,  ,  ,  " />p>
<p><input type="text" multi_status="  ,  ,  ,  " />p>

<script type="text/javascript" src="http://120.27.139.230:3000/distadmin/plugins/jQuery/jQuery-2.1.4.min.js">script>
<script type="text/javascript">
var multi_status_count = 0;
$('input[multi_status]').each(function(index, el) {
    el = $(el);
    var status = el.attr('multi_status').split(',');
    var val = el.val();
    if (isNaN(parseInt(val, 10))) el.val(val = 0);
    for (var a = 0; a < status.length; a++) {
        var chkid = 'multi_status_checkbox_' + multi_status_count++;
        var chk = $('' + chkid + '"' +
            ((val & Math.pow(2, a)) == Math.pow(2, a) ? ' checked' : '') + 
            ' onclick=""/> + chkid + '">' + status[a] + '');
        el.before(chk);
        (function(a) {
            $('#' + chkid).click(function() {
                el.val(val = parseInt(val, 10) + (this.checked ? 1 : -1) * Math.pow(2, a));
            });
        })(a);
    }
    //if (status.length) el.hide();
});
script>