<input class="category" type="radio" name="category" value="1" />携帯 <input class="category" type="radio" name="category" value="2" />スマートフォン <div id="category_select"> </div>
こういうラジオボタンで下の id="category_select" のdivブロックを下記のjavascriptで
表示したり非表示にしたりしているのは良くある話ですが。
<script>
$(document).ready(function(){
function displayVals() {
var singleValues = $('input[name="category"]:checked').val()
if(singleValues == 2){
$("#category_select").css("display","block");
}else{
$("#category_select").css("display","none");
}
}
$('input[name="category"]:radio').change(displayVals);
displayVals();
});
</script>
cakephpでデータをやり取りすると少し困ってしまう。
普通のヘルパーを使って
<?php
echo $form->input('category', array(
'type'=>'radio',
'legend' => false,
'label'=> true,
'class'=>'category',
'options'=>array('1'=>'携帯', '2'=>'スマートフォン'),
));
?>
このようにViewを書くとname部分が"data[Mobile][category]"になってしまい<div class="input radio"> <input type="hidden" name="data[Mobile][category]" id="MobileCategory_" value="" /> <input type="radio" name="data[Mobile][category]" id="MobileCategory1" class="category" value="1" /> <label for="MobileCategory1">携帯</label> <input type="radio" name="data[Mobile][category]" id="MobileCategory2" class="category" value="2" /> <label for="MobileCategory2">スマートフォン</label> </div>
こんなコードが出力される。
javascriptのSelectors部分がダブルクォーテーションで囲まれているから
input[name="category"] を input[name="data[Mobile][category]"] こう書き換えると
良いように思うが、これでは上手く行かない。理由は上手く説明できないので割愛するが
下記のように"["と"]"をエスケープしてやらなくてはいけない。
input[name="data\[Mobile\]\[category\]"]
だから正しいjavascript文は
<script>
$(document).ready(function(){
function displayVals() {
var singleValues = $('input[name="data\[Mobile\]\[category\]"]:checked').val()
var defined = 0;
if(singleValues == 2){
$("#category_select").css("display","block");
}else{
$("#category_select").css("display","none");
}
}
$('input[name="data\[Mobile\]\[category\]"]:radio').change(displayVals);
$(window).load(function () { displayVals();});
});
</script>
こうなる。
0 件のコメント:
コメントを投稿