TOP > Users > ORCA通信アーカイブ > vol.039

 ORCA通信

ORCAユーザーの皆様、こんにちは。
いつもお世話になっております。サイズの中村です。

第39回ORCA通信をお届けいたします。

INDEX
[1] 開発情報:予告!バージョンアップ
[2] スペック作成のヒント:排他の選択肢を制御するJavaScript


[1] 開発情報:予告!バージョンアップ

5月末にORCAのバージョンアップを予定しております。
今回は新機能の中から2つの機能をご紹介いたします。


[2] スペック作成のヒント:排他の選択肢を制御するJavaScript

今回は、排他の選択肢を制御するJavaScriptをご紹介いたします。
排他にチェックが入った場合、他の選択肢が予め選択できないようにすることができます。
逆に、排他以外の選択肢にチェックが入った場合は、排他の選択肢を選択することができないようになります。
本サンプルの場合、変更箇所は2、3行目のみです。
見本はこちら

■サンプルスペックの説明

BANK Java Scriptタブに以下を入力します。

var MA_DATA = new Object();
MA_DATA['Q39100'] = { 'EXC' : [ 5 ] }
MA_DATA['Q39200'] = { 'EXC' : [ 5 ] }
MA_DATAに設問番号
EXCに排他の選択肢番号を入力します。
排他選択肢が複数ある場合は、
カンマ区切りで入力してください。
function ma_onclock()
{
    for( var qid in MA_DATA )
    {
        var qinfo = MA_DATA[qid];

        var cnt = 0;
        var exc = 0;

        for( var i in qinfo['TGT'] )
        {
            var elem = qinfo['TGT'][i];

            if( elem.checked )
            {
                cnt++;

                if( qinfo['EXD'][i] )
                {
                    exc++;
                }
            }
        }

        if( exc > 0 )
        {
            var flg = true;

            for( var i in qinfo['TGT'] )
            {
                var elem = qinfo['TGT'][i];

                if( flg && qinfo['EXD'][i] && elem.checked )
                {
                    flg = false;
                }
                else
                {
                    elem.checked = false;
                    elem.disabled = true;
                }
            }
        }
        else
        {
            for( var i in qinfo['TGT'] )
            {
                var elem = qinfo['TGT'][i];

                if( qinfo['EXD'][i] )
                {
                    elem.disabled = ( cnt != 0 );

                }
                else
                {
                    elem.disabled = false;
                }

                if( elem.disabled )
                {
                    elem.checked = false;
                }

            }
        }
    }
}

function initMA()
{
    var form = document.forms[0];

    for( var qid in MA_DATA )
    {
        var re_id = new RegExp( "^" + qid + "XC(\\\d+)$" );

        var tgt = new Object();

        for( var i = 0 ; i < form.elements.length ; ++i )
        {
            var elem = form.elements[i];

            if( elem && elem.id )
            {
                if( elem.id.match( re_id ) )
                {
                    tgt[parseInt(RegExp.$1)] = elem;
                }
            }
        }

        for( var i in tgt )
        {
            var elem = tgt[i];
            elem.onclick = ma_onclock;
        }

        var exd = new Object();

        for( var i in MA_DATA[qid]['EXC'] )
        {
            exd[ MA_DATA[qid]['EXC'][i] ] = 1;
        }

        MA_DATA[qid]['TGT'] = tgt;
        MA_DATA[qid]['EXD'] = exd;
    }
}


function init()
{
    initMA();
    ma_onclock();
}
※BANK設定画面下の onload= の入力欄に init(); を入力します。

スペックを添付いたしますので是非コピ-してお使いください!!
スペックダウンロード

こちらより画面をみることができます。

今回のORCA通信はいかがでしたか。
ご不明な点等がございましたらお気軽にご連絡ください。

『こんな見本スクリプトが欲しい!』というご要望もお待ちしております。
どしどしお寄せください!!

それでは次回もお楽しみに!


  ページトップへ

vol.038へ vol.038へ vol.040へvol.040へ