Button Control: Radio Buttons

チェックボックスと同様、ラジオボタンも、その形状をボタン様にすることができる。
このExample(Exampleのページへのリンクはこちら)は、その方法を示している。

下はサンプルの初期画面。

見た目は先のチェックボックスとかわらないが、ラジオボタンであるので、1つのグループの中で1つしか選択ができない。

YUIでは、このグループをボタングループという。
サンプルは、markupからこのボタングループとradioボタンを生成する方法と、javascriptで(つまり、YUIモジュールで)形成する方法を説明するもの。
YUIには、このために、YAHOO.widget.ButtonGroupというオブジェクトが存在する。
markupが存在する場合には、radioボタン(input type=radioなど)が、上図のようなボタンに変換されるのだが、これらをdivタグで括り、そのidをButtonGroupのコンストラクタで指定すればボタングループができあがる。マークアップで書いておいたradioボタンは、自動的にYUIのボタンに変換される。

Javascriptで作成する場合には、ButtonGroupのインスタンスを作成し、それにボタンを追加するという方法をとる(詳細は添付のhtmlと、ButtonGroupのAPIドキュメントを参照)。

以下は、サンプルでラジオボタン11を押したときの画面。ラジオボタン11は、ラジオボタン9(初期値)と同じボタングループに属している。
alertで、変更前のラベルと、変更後のラベルを表示するようにした。
このalert表示は、ボタンのイベントハンドラとして起動する。

以下に、Javascriptを含むhtmlファイルの全文を表示する。

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Ajax_Sampling</TITLE>
<style type="text/css">
body {
	margin:0;
	padding:0;
}
</style>
<link rel="stylesheet" type="text/css" href="scripts/yui/fonts/fonts-min.css" />
<link rel="stylesheet" type="text/css" href="scripts/yui/button/assets/skins/sam/button.css" />
<script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="scripts/yui/element/element-beta-min.js"></script>
<script type="text/javascript" src="scripts/yui/button/button-min.js"></script>

<style type="text/css" id="defaultstyle">
#container {
	margin: 2px;
	padding: 3px;
	width: 450px;
	height: auto;
	border:1px dashed #999999;
}

#button-example-form fieldset, 
#button-example-form fieldset div {
	border: 2px groove #ccc;
	margin: .5em;
	padding: .5em;
}
    
#button-example-form-postdata {
	border: dashed 1px #666;
	background-color: #ccc;
	padding: 1em;
}

#button-example-form-postdata h2 {
	margin: 0 0 .5em 0;
	padding: 0;
	border: none;
}
</style>

<script type="text/javascript">
//モジュールパターンで実装する。
YAHOO.namespace("EGP");

YAHOO.EGP.RadioBottum = function() {

	var ButtonGroup = YAHOO.widget.ButtonGroup;

	var onCheckedButtonChange = function (p_oEvent) {
		alert('prev : '+p_oEvent.prevValue.get("value")+
				 ' new : '+p_oEvent.newValue.get("value"));
	};
/*
	var onCheckedButtonChange = function (p_oEvent) {

        if(p_oEvent.prevValue) {
            YAHOO.log(p_oEvent.prevValue.get("name"), "info", "example4");
        }
        
        if(p_oEvent.newValue) {
            YAHOO.log(p_oEvent.newValue.get("name"), "info", "example4");
        }
    
    };
*/

	return{
    	init: function() {

	// ---- buttonをinputタグのtype=checkboxから生成する。-----
		
            var oButtonGroup1 = new ButtonGroup("buttongroup1");
            oButtonGroup1.on("checkedButtonChange", onCheckedButtonChange);

            var oButtonGroup2 = new ButtonGroup("buttongroup2");
            oButtonGroup2.on("checkedButtonChange", onCheckedButtonChange);

	// ---- buttonをmarkupなしで生成する。-----

            var oButtonGroup3 = new ButtonGroup(
                    { 	id:  "buttongroup3", 
                        name:  "radiofield3", 
                        container:  "radiobuttonsfromjavascript", 
                        usearia: true 
                    });

            oButtonGroup3.addButtons([
                { label: "Radio 9", value: "Radio 9", checked: true },
                { label: "Radio 10", value: "Radio 10" }, 
                { label: "Radio 11", value: "Radio 11" }, 
                { label: "Radio 12", value: "Radio 12" }
            ]);
            
            oButtonGroup3.on("checkedButtonChange", onCheckedButtonChange);

		}
	};
}();

//DOMが完全にloadされたら、サンプルを初期化する。
YAHOO.util.Event.onDOMReady(
		//DomReadyイベントで発火するハンドラ
		YAHOO.EGP.RadioBottum.init,
		//ハンドラに渡すオブジェクト(関数)
		YAHOO.EGP.RadioBottum,
		//ハンドラは、上記のオブジェクトのスコープをもつ。   
		true
);

</script>
</HEAD>

<BODY class="yui-skin-sam">
<div id="container">
<p>
Radio Buttonの作り方のサンプルです。
</p>

<form id="button-example-form" name="button-example-form" method="post">

    <fieldset id="radiobuttons">

        <legend>Radio Buttons</legend>

        <fieldset id="radiobuttonsfrommarkup">
            <legend>From Markup</legend>

            <div id="buttongroup1" class="yui-buttongroup">
                <input id="radio1" type="radio" name="radiofield1" value="Radio 1" checked>
                <input id="radio2" type="radio" name="radiofield1" value="Radio 2">
                <input id="radio3" type="radio" name="radiofield1" value="Radio 3">

                <input id="radio4" type="radio" name="radiofield1" value="Radio 4">
            </div>

            <div id="buttongroup2" class="yui-buttongroup">
                <span id="radio5" class="yui-button yui-radio-button yui-button-checked">
                	<span class="first-child">
                		<button type="button" name="radiofield2" value="Radio 5">Radio 5</button>
                	</span>
                </span>
                <span id="radio6" class="yui-button yui-radio-button">
                	<span class="first-child">
                		<button type="button" name="radiofield2" value="Radio 6">Radio 6</button>
                	</span>
                </span>
                <span id="radio7" class="yui-button yui-radio-button">
                	<span class="first-child">
                		<button type="button" name="radiofield2" value="Radio 7">Radio 7</button>
                	</span>
                </span>
                <span id="radio8" class="yui-button yui-radio-button">
                	<span class="first-child">
                		<button type="button" name="radiofield2" value="Radio 8">Radio 8</button>
                	</span>
                </span>

            </div>

        </fieldset>

        <fieldset id="radiobuttonsfromjavascript">
            <legend>From JavaScript</legend>
        </fieldset>

    </fieldset>

    <div>
        <input type="reset" name="resetbutton" value="Reset Form">
        <input type="submit" name="submitbutton" value="Submit Form">
    </div>

</form>


</div>
</BODY>		
</HTML>