<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>5am! Web Illusions &#187; JavaScriptを学ぶ</title>
	<atom:link href="http://5am.jp/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://5am.jp</link>
	<description>札幌の制作会社でWebデザイナーをしています。眼瞼下垂手術後の眼瞼痙攣の悪化と日々健闘中。</description>
	<lastBuildDate>Fri, 13 Apr 2012 04:35:49 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>JavaScriptを使ってフォーム項目の表示/非表示を切り替えるスクリプト</title>
		<link>http://5am.jp/javascript/form_change_javascript/</link>
		<comments>http://5am.jp/javascript/form_change_javascript/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 16:11:10 +0000</pubDate>
		<dc:creator>rin316</dc:creator>
				<category><![CDATA[JavaScriptを学ぶ]]></category>

		<guid isPermaLink="false">http://5am.jp/?p=165</guid>
		<description><![CDATA[こんなことありませんか？ フォームの項目が多くなり過ぎてしまい、ユーザーがストレスを感じそうと思う時はありませんか？ そんな時、押した項目によってその後の内容を変化させれば 項目が減って見た目もスッキリ・ユーザーの離脱も [...]]]></description>
			<content:encoded><![CDATA[<!-- ========================================================
	start contents
==========================================================-->

<script type="text/javascript" src="http://5am.jp/common/js/change_090629.js"> </script>


<div id="entry-090628">
<h3 class="firstChild">こんなことありませんか？</h3>
<p>フォームの項目が多くなり過ぎてしまい、ユーザーがストレスを感じそうと思う時はありませんか？<br />
そんな時、押した項目によってその後の内容を変化させれば<br />
項目が減って見た目もスッキリ・ユーザーの離脱も効果的に抑えられるはずです。<br />
JavaScriptはかなりの初心者なので忘れないようメモしてみました。</p>


<h3>【サンプル】例えばお申し込みフォームで…</h3>
<p>・【初めて申し込む】を押した時は、「紹介者」入力欄・特典を表示。<br />
・【2度目以降の利用】を押した時は、「会員番号」入力欄を表示。 
</p>

<!-- script============================================ -->
<script type="text/javascript">
	function entryChange1(){
		radio = document.getElementsByName('entryPlan') 
		if(radio[0].checked) {
			//フォーム
			document.getElementById('firstBox').style.display = "";
			document.getElementById('secondBox').style.display = "none";
			//特典
			document.getElementById('firstNotice').style.display = "";
		}else if(radio[1].checked) {
			//フォーム
			document.getElementById('firstBox').style.display = "none";
			document.getElementById('secondBox').style.display = "";
			//特典
			document.getElementById('firstNotice').style.display = "none";
		}
	}

</script>
<!-- /script============================================ -->


<form>
<table class="chengeForm" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<th>利用方法</th>
		<td>
			<label><input id="inputFirst" type="radio" name="entryPlan" value="hoge1" onclick="entryChange1();" checked="checked" />初めて申し込む</label>
			<label><input id="inputSecond" type="radio" name="entryPlan" value="hoge2" onclick="entryChange1();" />2度目以降の利用</label>
		</td>
	</tr>

	<!-- 表示非表示切り替え -->
	<tr id="firstBox">
		<th>紹介者</th>
		<td><input type="text" /><br />
		<small>紹介された方のお名前を入力してください。</small></td>
	</tr>
	
	<!-- 表示非表示切り替え -->
	<tr id="secondBox">
		<th>会員番号</th>
		<td><input type="text" /><br />
		<small>会員番号を入力してください。</small></td>
	</tr>
</table>
</form>


<!-- 表示非表示切り替え -->
<div id="firstNotice">
	特典:初めての方は30%オフ！
</div>

</div>

<span id="more-165"></span>

<div id="entry-090628">


<h3>サンプルソース(ラジオボタン)</h3>



<p>HTML</p>
[html]

<form>
<table border="0" cellspacing="0" cellpadding="0">
	<tr>
		<th>利用方法</th>
		<td>
			<label><input type="radio" name="entryPlan" value="hoge1" onclick="entryChange1();" checked="checked" />初めて申し込む</label>
			<label><input type="radio" name="entryPlan" value="hoge2" onclick="entryChange1();" />2度目以降の利用</label>
		</td>
	</tr>

	<!-- 表示非表示切り替え -->
	<tr id="firstBox">
		<th>紹介者</th>
		<td><input type="text" />
		<p>紹介された方のお名前を入力してください。</p></td>
	</tr>
	
	<!-- 表示非表示切り替え -->
	<tr id="secondBox">
		<th>会員番号</th>
		<td><input type="text" />
		<p>会員番号を入力してください。</p></td>
	</tr>
</table>
</form>


<!-- 表示非表示切り替え -->
<div id="firstNotice">
	特典:初めての方は30%オフ！
</div>

[/html]



<p>JavaScript</p>
[javascript]
<script type="text/javascript">
	function entryChange1(){
		radio = document.getElementsByName('entryPlan') 
		if(radio[0].checked) {
			//フォーム
			document.getElementById('firstBox').style.display = "";
			document.getElementById('secondBox').style.display = "none";
			//特典
			document.getElementById('firstNotice').style.display = "";
		}else if(radio[1].checked) {
			//フォーム
			document.getElementById('firstBox').style.display = "none";
			document.getElementById('secondBox').style.display = "";
			//特典
			document.getElementById('firstNotice').style.display = "none";
		}
	}
	
	//オンロードさせ、リロード時に選択を保持
	window.onload = entryChange1;
</script>
[/javascript]	




<h4>HTML側の説明</h4>
<p>inputに「onclick=&#8221;関数名() 」を追加する。</p>
<p class="sourceCode">
&lt;input type=&quot;radio&quot; name=&quot;entryPlan&quot; value=&quot;firstEntry&quot; onclick=&quot;entryChange1(); /&gt;
</p>



<h4>JavaScript側の説明</h4>
<p>最初にfunctionで関数名【entryChange1】を作る。</p>
<p class="sourceCode">
function entryChange1(){<br />
　　　　//内容<br />
}<br />
</p>

<p class=" mt30">変数【radio】に、フォームのname【entryPlan】が一致するものを代入する。</p>
<p class="sourceCode">
radio = document.getElementsByName(&#8216;entryPlan&#8217;)
</p>

<p class=" mt30">もし1つ目のラジオボタンがチェックされたら1を実行、もし2つ目なら2を実行。</p>
<p class="sourceCode">
if(radio[0].checked) {<br />
　　　　//1を実行<br />
}else if(radio[1].checked) {<br />
　　　　//2を実行<br />
}<br />
</p>

<p class=" mt30">表示/非表示の切り替えはIDのdisplayを変える。</p>
<p class="sourceCode">
document.getElementById(&#8216;【ID名】&#8217;).style.display = &#8220;【表示方法】&#8221;;<br />
</p>

<p class=" mt30">こんな感じで切り替え。</p>
<p class="sourceCode">
if(radio[0].checked) {<br />
　　　　document.getElementById(&#8216;firstBox&#8217;).style.display = &#8220;&#8221;;<br />
}else if(radio[1].checked) {<br />
　　　　document.getElementById(&#8216;firstBox&#8217;).style.display = &#8220;none&#8221;;<br />
}<br />
</p>
<p>最初「display = &#8220;inherit&#8221;;」と書いたらIE6でエラーが出て切り替わらなかったので、<br />
「display = &#8220;&#8221;;」と空白で記載したらうまく動いきました。<br />
今回であれば表示される行の所は「display = &#8220;table-row&#8221;;」<br />
特典の所は「display = &#8220;block&#8221;;」でもOK</p>
<p class=" mt30">このままだと読み込み時にラジオボタンをクリックするまで両方の行が出てしまうので、<br />
作った関数【entryChange1】をオンロードさせます。<br />
最初「entryChange1()」のように「()」を付けていたら動かなくて困った。。</p>
<p class="sourceCode">
//オンロードさせ、リロード時に選択を保持<br />
window.onload = entryChange1;<br />
</p>

<p class=" mt30">htmlのbodyに記載する方法もあります。<br />
ただbodyに入れるとjsとhtmlが分離されず管理が大変になりそう</p>
<p class="sourceCode">
&lt;body onload=&quot;entryChange1()&quot;&gt;
</p>




<h3>サンプルソース(セレクトボックス)</h3>


<form>
<table class="chengeForm" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<th>利用方法</th>
		<td>
			<select id="changeSelect" name="hoge" onchange="entryChange2();">
				<option value="select1">初めて申し込む</option>
				<option value="select2">2度目以降の利用</option>
			</select>
		</td>
	</tr>

	<!-- 表示非表示切り替え -->
	<tr id="firstBox2">
		<th>紹介者</th>
		<td><input type="text" /><br />
		<small>紹介された方のお名前を入力してください。</small></td>
	</tr>
	
	<!-- 表示非表示切り替え -->
	<tr id="secondBox2">
		<th>会員番号</th>
		<td><input type="text" /><br />
		<small>会員番号を入力してください。</small></td>
	</tr>
</table>
</form>


<!-- 表示非表示切り替え -->
<div id="firstNotice2">
	特典:初めての方は30%オフ！
</div>


<p>HTML</p>
[html]

<form>
<table border="0" cellspacing="0" cellpadding="0">
	<tr>
		<th>利用方法</th>
		<td>
			<select id="changeSelect" name="hoge" onchange="entryChange2();">
				<option value="select1">初めて申し込む</option>
				<option value="select2">2度目以降の利用</option>
			</select>
		</td>
	</tr>

	<!-- 表示非表示切り替え -->
	<tr id="firstBox2">
		<th>紹介者</th>
		<td><input type="text" />
		<p>紹介された方のお名前を入力してください。</p></td>
	</tr>
	
	<!-- 表示非表示切り替え -->
	<tr id="secondBox2">
		<th>会員番号</th>
		<td><input type="text" />
		<p>会員番号を入力してください。</p></td>
	</tr>
</table>
</form>


<!-- 表示非表示切り替え -->
<div id="firstNotice2">
	特典:初めての方は30%オフ！
</div>

[/html]


<p>JavaScript</p>
[javascript]
<script type="text/javascript">
	function entryChange2(){
		if(document.getElementById('changeSelect')){
			id = document.getElementById('changeSelect').value;
			
			if(id == 'select1'){
				//フォーム
				document.getElementById('firstBox2').style.display = "";
				document.getElementById('secondBox2').style.display = "none";
				//特典
				document.getElementById('firstNotice2').style.display = "";
			}else if(id == 'select2'){
				//フォーム
				document.getElementById('firstBox2').style.display = "none";
				document.getElementById('secondBox2').style.display = "";
				//特典
				document.getElementById('firstNotice2').style.display = "none";
			}
		}
	}
	
	//オンロードさせ、リロード時に選択を保持
	window.onload = entryChange2;
</script>
[/javascript]



<h4>HTML側の説明</h4>
<p>selectに「id=&#8221;changeSelect&#8221;」「onchange=&#8221;関数名() 」を追加する。</p>
<p class="sourceCode">
&lt;select id=&quot;changeSelect&quot; name=&quot;hoge&quot; onchange=&quot;entryChange2();&quot;&gt;<br />
　　　　&lt;option value=&quot;select1&quot;&gt;初めて申し込む&lt;/option&gt;<br />
　　　　&lt;option value=&quot;select2&quot;&gt;2度目以降の利用&lt;/option&gt;<br />
&lt;/select&gt;
</p>



<h4>JavaScript側の説明</h4>
<p>もしIDがchangeSelectだったらこの中を実行</p>
<p class="sourceCode">
if(document.getElementById(&#8216;changeSelect&#8217;)){<br />
　　　　//この中を実行<br />
}
</p>

<p class=" mt30">changeSelectの中で選んだvalueの値を変数【id】に代入</p>
<p class="sourceCode">
id = document.getElementById(&#8216;changeSelect&#8217;).value;
</p>


<p class=" mt30">もし変数【id】(valueの値)が同じならこの中を実行</p>
<p class="sourceCode">
if(id == &#8216;select1&#8242;){<br />
　　　　//この中を実行<br />
}else if(id == &#8216;select2&#8242;){<br />
　　　　//この中を実行<br />
}
</p>

<h3>ひとつのページ内で複数のwindow.onloadが動作しない</h3>
<p>今回のサンプルのようにひとつのページ内で2箇所以上window.onloadを使おうとしたら<br />
最後のwindow.onload以外は反映されない問題が発生。。<br />
下の例だとentryChange2しかonloadが反映されない。
</p>
<p class="sourceCode">window.onload = entryChange1;<br />
window.onload = entryChange2;
</p>


<p class=" mt30">そこで2つを1つの関数【init】にまとめてonloadしたら上手く反映された！</p>
<p class="sourceCode">
function init(){<br />
　　　　entryChange1();<br />
　　　　entryChange2();	<br />
}<br />
window.onload = init;
</p>

<p class=" mt30">ただこれだと、複数のJavaScriptライブラリがあって、<br />
他にwindow.onloadが使われている場合上書きしてしまうので、<br />
正確には<a href="http://blog.webcreativepark.net/2008/02/26-185844.html" class="liexternal">addEventListener() メソッドとattachEvent()メソッドを使うのがベスト</a>みたいです。</p>

<h3>動的な書き換えって面白い！</h3>
<p>JavaScriptは初心者だったので、onloadのタイミングだったり、ブラウザによる差異などなど<br />
fixする事が沢山あって難しいな～と感じました。<br />
それにしても動的な書き換えって面白い！少しずつ使いこなせるようにがんばろうと思います。<br />
会社のプログラマに色々教えて貰いながらの作業でとても感謝でした！</p>


<!-- /div#entry-###### --></div>

<!-- ========================================================
	end contents
==========================================================-->

]]></content:encoded>
			<wfw:commentRss>http://5am.jp/javascript/form_change_javascript/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

