ミッションたぶんPossible

どこにでもいるシステムエンジニアのなんでもない日記です。たぶん。

タグでデータピッカーが隠れるバグを回避するには?


 ColdFusionの<cfinput>タグにはカレンダー入力を簡単に作れるtype="datefield"という属性が用意されています。HTML5JavaScriptを使わなくともカレンダー入力を使えるのは非常に魅力的なんですが、ちょっと困った事が。


 他のブラウザでは特に問題無いんですが、IEで表示させた場合…



 縦に2つ以上このdatefieldを並べてると…



 上のdatefieldでカレンダーを展開された時に下のdatefieldで描画が阻害され、カレンダーの一部が使えなくなっちゃうんです。なんじゃこりゃ〜!!


 …まぁColdFusionのバグでしょうね。IEだけ対応がもれたんでしょう。で、この現象を解決する手法を見つけたのでご紹介。

修正前
<tr height="80">
	<td align="left" valign="middle" nowrap>開始日</td>
	<td align="left" valign="middle" nowrap>
		<CFINPUT type="datefield" mask="yyyy-mm-dd" name="startYmd" value=""><br/><br/>
		(入力形式:「yyyy/mm/dd」 or 「yyyy-mm-dd」)
	</td>
</tr>
<tr height="80">
	<td align="left" valign="middle" nowrap>終了日</td>
	<td align="left" valign="middle" nowrap>
		<CFINPUT type="datefield" mask="yyyy-mm-dd" name="endYmd" value=""><br/><br/>
		(入力形式:「yyyy/mm/dd」 or 「yyyy-mm-dd」)
	</td>
</tr>
修正後
<tr height="80">
	<td align="left" valign="middle" nowrap>開始日</td>
	<td align="left" valign="middle" nowrap>
		<div style="z-index:2; position:relative">
			<CFINPUT type="datefield" mask="yyyy-mm-dd" name="startYmd" value=""><br/><br/>
			(入力形式:「yyyy/mm/dd」 or 「yyyy-mm-dd」)
		</div>
	</td>
</tr>
<tr height="80">
	<td align="left" valign="middle" nowrap>終了日</td>
	<td align="left" valign="middle" nowrap>
		<div style="z-index:1; position:relative">
			<CFINPUT type="datefield" mask="yyyy-mm-dd" name="endYmd" value=""><br/><br/>
			(入力形式:「yyyy/mm/dd」 or 「yyyy-mm-dd」)
		</div>
	</td>
</tr>

 要は<div>タグで囲んで、スタイルにz-indexを指定することで描画の優先順位を示してあげれば良いんですね。下に配置されるdatefieldのz-indexの指定がより小さな数値で指定してあげて下さい。


 以下が改善後の画面。多分IE9からは改善されると思いますが、それを待ってる訳にもいかない人はぜひ参考にしてみて下さい。




ちなみに今回は以下のサイトを参考にさせて頂きました。多謝。


http://coldfusion-style.jp/modules/newbb/viewtopic.php?viewmode=flat&topic_id=300&forum=2