別サイトで、
『「規格1」が「選択してくだい」の時、「規格2」をdisabledにしたい。』
との問いが有り、
規格、javascriptを避けて来た身として、そろそろ、折り合いを付けないとと思い、下記までは探ったのですが、ここで、行き詰まりました。
そもそも、
「それは無理」なのか、何か手が有るのか、、、
アドバイス頂けると幸いです。
今更ながらの、ECCUBE2.12.0で、です。
===記===
javascriptは、敢えて避けてきたので、『そんな訳はないよなぁ』と思いつつも、
味を「選択してください」にすると、大きさが「選択してください」に戻ることから、
味の変更でfnSetClassCategories()が動くもの、、、と勝手に思い込んでいたのが、大きな間違い。>自分
やはり、初回表示時とsubmit「かごに入れる」でないと、fnSetClassCategories()は動かないですよね。
味の変更で、大きさが「選択してください」に戻るのは、
規格1の
「<!--{html_options options=$arrClassCat1 selected=$arrForm.classcategory_id1.value}-->」
のおかげ?
多分、以下のjavascriptの動作が、味の変更で動作すれば、ご希望に添えると思うのですが、それは、無理。
(「かごに入れる」を押せば、それなりな動きはするけれど。)
<detail.tpl>
<script type="text/javascript">
//<![CDATA[
// 規格2に選択肢を割り当てる。
function fnSetClassCategories(form, classcat_id2_selected) {
var $form = $(form);
var product_id = $form.find('input[name=product_id]').val();
var elem = document.getElementById("select2"); // ★ここから
if ($form.find('select[name=classcategory_id1]').val() == "__unselected") {
elem.innerHTML = "<select disabled name='classcategory_id2'>";
} else {
elem.innerHTML = "<select name='classcategory_id2'>";
} // ★ここまで
var $sele1 = $form.find('select[name=classcategory_id1]');
var $sele2 = $form.find('select[name=classcategory_id2]');
setClassCategories($form, product_id, $sele1, $sele2, classcat_id2_selected);
}
$(document).ready(function() {
$('a.expansion').facebox({
loadingImage : '<!--{$smarty.const.ROOT_URLPATH}-->js/jquery.facebox/loading.gif',
closeImage : '<!--{$smarty.const.ROOT_URLPATH}-->js/jquery.facebox/closelabel.png'
});
});
//]]>
</script>
<!--▼規格2-->
<ul class="clearfix">
<li><!--{$tpl_class_name2|h}-->:</li>
<li>
<p id="select2">select2</p> // ★ここ
</select>
<!--{if $arrErr.classcategory_id2 != ""}-->
<br /><span class="attention">※ <!--{$tpl_class_name2}-->を入力して下さい。</span>
<!--{/if}-->
</li>
</ul>
<!--▲規格2-->
javascriptを熟知していれば、fnSetClassCategories()の変更と
↓の「lfMakeSelect()」が呼ばれるまでのお膳立てとの連携で、実現できるものなのか?
<LC_Page_Products_Detail.php>
/* 規格選択セレクトボックスの作成 */
function lfMakeSelect() {
return 'fnSetClassCategories('
. 'document.form1, '
. SC_Utils_Ex::jsonEncode($this->objFormParam->getValue('classcategory_id2'))
. '); ';
}
残念ながら、今回は、小生の知識では、ご希望に添えませんでした。