ガイドパネル機能を使ってヘルプメッセージ的な利用をされている方は、多いと思います。ただ、あるデータ項目が一定の条件の時だけガイドパネルを表示したい。ということがあるかと思います。当社の場合には、費用申請の際にある条件において、申請金額がある一定額を超えると取締役会の承認が必要になることがあります。めったに発生しない条件のため、申請者や承認者が取締役会の承認が必要であることを忘れがちになります。そこで、「ある条件下において申請金額ある規定されている金額を超えている場合にのみ」取締役会の承認が必要であることを記載したガイドパネルが表示されるように設定をしています。
まず、ガイドパネルの場合には、他のデータ項目のようにjQueryから指定をするidが自動的に生成されれていません。そのため、Javascirptで処理をしたガイドパネルに自身で<div id="xxxxx"> </div>とID番号を指定する必要があります。(これに気づくのにまたまた時間がかかりました)
以下の例は、ガイドパネルのデータ番号が87でしたので、自分でcomment87というIDを指定しています。
<div id="comment87"><font size="3" color="red"> 本申請は、◯◯の承認上限を超えているために取締役会の承認が必要です。<BR></font><BR>
<font color=red >申請者は、○○本部に取締役会への上程依頼を行って下さい。</font><BR>
</div>
jQueryでは、このcomment87をidとして処理をするようにします。
<script type="text/javascript">
jQuery(document).ready(function(){ //取締役会承認要件のガイドパネルを見えないようにする。
var NONE = "None";
var totalExpenseStr = NONE;
var totalExpense = -1;
var Asset = 0;
if( jQuery('#readonly_86').length){ //費用(数値型であるが表示だけになっている場合)
totalExpenseStr = jQuery('#readonly_86').text();
} else if ( jQuery('input[name="data[86].input"]').size()) { //編集可能な状態の場合)
totalExpenseStr = jQuery('input[name="data[86].input"]').val();
} //else if終了
//alert("readonly86->" + totalExpenseStr + "data[86]->" + totalExpense); //DEBUG用
if (totalExpenseStr != NONE) { //もしデータ項目番号86が無い場合には、ここはNONEとなる。
totalExpense = totalExpenseStr.replace(/[^\x01-\x7E]/g, function(s){
return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
}).replace(/\D/g, ''); //データ番号86があった場合に、半角数値だけを取り出す
totalExpense = Number(totalExpense); //文字型から数字型に変更
//alert("数字->" + totalExpense); //DEBUG用
} //IF終了
if( jQuery('#readonly_84').length){ //○○計上するかの選択肢の文字列(表示のみの場合)
Asset = jQuery('#readonly_84').text();
Asset = Asset.match(/○○計上する/); //HTML内にある文字前後にゴミが入っているのでそれを取り除く
if (Asset == "○○計上する") { //表示のみの場合には、文字列が取得されるのでベタ打ち比較
Asset = 1;
} //IF終了
} else if (jQuery('select[name="data[84].selects"]').length){
Asset = jQuery('select[name="data[84].selects"]').val(); //○○計上するかの選択肢の文字列(編集可の場合)
} //else if終了
jQuery('#comment87').parent().parent().css("display","none"); //ガイドパネル非表示
if ( totalExpense >= 100000000 && Asset == 1 ) { //総費用が△△△△(ここでは、1億)以上かつ○○計上する
alert("取締役会の承認が必要です。取締役会への上程を○○本部に依頼して下さい。"); //開催が必要な場合には、アラートウィンドウを表示
jQuery('#comment87').parent().parent().css("display","block"); //ガイドパネル表示
} else {
jQuery('#comment87').parent().parent().css("display","none"); //ガイドパネル非表示
} //else終了
});
</script>
少し条件の判定が長めのスクリプトになりますが、いくつかポイントがあります。
- データ項目のデータ編集許可が「編集可」「表示のみ」の双方に対応しておかないといけないことです。各データ項目は、「編集可」「表示のみ」でHTML内のidが異なるために、 input[name="data[86].input"]' と '#readonly_86' の双方をチェックしないといけません。
- 「表示のみ」の場合には、jQuery('#readonly_86').text(); で取得した文字には、前後にゴミが入っているために、数値部分だけを抜き出す処理が必ず必要になります。
- その上で、文字型から数値型に変換した上で、if文で大小を比較する必要があります。
これで、ガイドパネルを動的に表示/非表示することができるようになります。
三回に渡りJavascriptを使って、クエステトラのユーザインターフェスの改良する方法をご説明しましたが、如何でしたか?