You need to sign in to do that
Don't have an account?

チェックボックス一括選択
お世話になっております。
またまた質問させて頂きます。
VisualForceとapexを使って、チェックボックスで選ばれたデータを登録する。という
プログラムを作成しております。
そこで、チェックボックスの一括選択の処理を追加しようと思ったのですが、なかなかうまくいきません。
以下プログラムです。
<Apex>
public Boolean CheckChange {get; set;}
integer counter = 0;
// イベントオブジェクト内の選択リストをチェックボックスで表示
public List<SelectOption> getSelOptions() {
List<SelectOption> seloptions = new list<SelectOption>();
Schema.DescribeFieldResult fieldResult = Event__c.brand__c.getDescribe();
List<Schema.PicklistEntry> pickListEntry = fieldResult.getPicklistValues();
for (Schema.PicklistEntry pick: pickListEntry) {
seloptions.add(new selectOption(pick.getValue(), pick.getLabel()));
counter = counter +1;
}
return seloptions;
}
/** チェックボックス全選択処理 */
public void ToggleChange(){
// 選択リストの数分チェックボックスにCheckChangeの結果を反映する
for(Integer i = 0; i < counter; i++){
// seloptions.add(new selectOption(CheckChange)); ←ここの処理がわかりません。
}
}
<Visualforce>
<apex:pageBlockSection title="ブランド選択">
<apex:inputCheckbox value="{!CheckChange}">
<apex:actionSupport action="{!ToggleChange}" event="onchange" rerender="theForm"/>
</apex:inputCheckbox>
<apex:selectCheckboxes value="{!selections}" layout="pageDirection">
<apex:selectOptions value="{!seloptions}"/>
</apex:selectCheckboxes>
</apex:pageBlockSection>
このように記述しているのですが、一括でチェックのON/OFFをすることが出来ません。
間違っているところやアドバイスなどありましたらよろしくお願い致します。
またまた質問させて頂きます。
VisualForceとapexを使って、チェックボックスで選ばれたデータを登録する。という
プログラムを作成しております。
そこで、チェックボックスの一括選択の処理を追加しようと思ったのですが、なかなかうまくいきません。
以下プログラムです。
<Apex>
public Boolean CheckChange {get; set;}
integer counter = 0;
// イベントオブジェクト内の選択リストをチェックボックスで表示
public List<SelectOption> getSelOptions() {
List<SelectOption> seloptions = new list<SelectOption>();
Schema.DescribeFieldResult fieldResult = Event__c.brand__c.getDescribe();
List<Schema.PicklistEntry> pickListEntry = fieldResult.getPicklistValues();
for (Schema.PicklistEntry pick: pickListEntry) {
seloptions.add(new selectOption(pick.getValue(), pick.getLabel()));
counter = counter +1;
}
return seloptions;
}
/** チェックボックス全選択処理 */
public void ToggleChange(){
// 選択リストの数分チェックボックスにCheckChangeの結果を反映する
for(Integer i = 0; i < counter; i++){
// seloptions.add(new selectOption(CheckChange)); ←ここの処理がわかりません。
}
}
<Visualforce>
<apex:pageBlockSection title="ブランド選択">
<apex:inputCheckbox value="{!CheckChange}">
<apex:actionSupport action="{!ToggleChange}" event="onchange" rerender="theForm"/>
</apex:inputCheckbox>
<apex:selectCheckboxes value="{!selections}" layout="pageDirection">
<apex:selectOptions value="{!seloptions}"/>
</apex:selectCheckboxes>
</apex:pageBlockSection>
このように記述しているのですが、一括でチェックのON/OFFをすることが出来ません。
間違っているところやアドバイスなどありましたらよろしくお願い致します。
Google Chromeの場合、右クリック→要素を選択でその要素のIDを確認することができます。
apex:selectCheckboxesのチェックボックスが3つある場合次のようにIDが連番になっていることが確認できます。
次のような感じでJavaScriptを使って一括チェックを実行できます。
ApexとJavaScriptの一括チェック処理のサンプルです。このままコピペして動作確認できると思います。ApexとJavaScriptで結構違いがでるので確認してみてください。
selectCheckboxes.page
selectCheckboxesCon.cls
All Answers
例えば次のようなリスト値を持っているとすると...
次の処理でチェックをつけた状態にすることができます。
List<SelectOption>の件数分セットすればいいのでこんな感じになります。
チェックを一括解除したい場合は次のように「new List<String>()」で対応可能です。
Apexクラスの処理でapex:selectCheckboxesの一括チェックはこんな感じで対応できると思います。
Google Chromeの場合、右クリック→要素を選択でその要素のIDを確認することができます。
apex:selectCheckboxesのチェックボックスが3つある場合次のようにIDが連番になっていることが確認できます。
次のような感じでJavaScriptを使って一括チェックを実行できます。
ApexとJavaScriptの一括チェック処理のサンプルです。このままコピペして動作確認できると思います。ApexとJavaScriptで結構違いがでるので確認してみてください。
selectCheckboxes.page
selectCheckboxesCon.cls
お世話になっております。
そうなんですね!True/Falseで判断できるものだと思っていました。
頂いたサンプルで早速試してみたのですが、JavaScriptのほうが作動してくれず、結果を見ることが出来ませんでした。
ちなみに、サンプルだとボタンを追加して選択していますが、チェックボックスでの制御は難しいでしょうか?
console.logの部分がエラーになるブラウザがあった気がします。
Google Chromeで検証しているのでChromeで試してみてもらえるといいかもしれないです。
もしくはconsole.logの処理を除外してみてください。
チェックボックスの制御でも対応可能です。
Apexで処理する場合はapex:actionSupportでApexクラスの処理を呼び出す形になると思います。
jsの方はonclickかonchangeイベントで処理を行えます。
apex:actionSupport - Salesforce.com
https://www.salesforce.com/us/developer/docs/pages/Content/pages_compref_actionSupport.htm
ただ、元々私が作成しているほうにこの処理を移植しようと思うとなかなかうまくいきません。
というかどのように反映させればよいかがよくわかりません。
もしよろしければ、上記のソースに当てはめて頂けないでしょうか?
また、javascriptの
for (var i = 0; i < itemCnt; i++) {
document.getElementById(checkId + ':' + i).checked = true;
}
この部分についてなのですが、直接trueを代入しているかと思いますが、制御基になるチェックボックスが、trueになれば選択、falseになれば解除
といったようなことは可能でしょうか?
厚かましいお願いとは重々承知しておりますが、よろしくお願いいたします。
やっと意味が解りました!
チェックリストの並びを縦並びにしたいがために、
ずっと<apex:selectCheckboxes>にしていたためJavaScriotが動かなかったようです。
そこで疑問がわいたのですが、
<apex:selectCheckboxes>と<apex:inputCheckbox>の違いとは何なのでしょうか?
また、<apex:inputCheckbox>を使ったときにチェックボックスを縦並びにする方法はありますでしょうか?
重ね重ね申し訳ございませんが、よろしくお願い致します。
<apex:selectCheckboxes>はリストに値をセットするだけで動的に作成することができ、上のサンプルのようにJavaScriptで処理する際にリスト番号を変えるだけで値をセットすることができます。
<apex:inputCheckbox>は変数固定で使用するので動的に追加したりするのには向いていません。IDもそれぞれ関連しないものが割り当てられるのでJavaScript内で一括チェックするには向いていないのかなと思います。
表示するチェックボックスが固定の場合は、<apex:inputCheckbox>で問題ないと思います。こちらで縦並びにしたい場合はCSSやTeble表示などで対応できると思います。今回のような場合は一括チェック用のチェックボックスを<apex:inputCheckbox>で表示して、関連するチェックボックスは<apex:selectCheckboxes>で表示するイメージなのかなと思っています。
詳しいご説明ありがとうございます。
まだ少し理解できない部分もあるのですが、自分なりに理解を深めてゆきたいと思います。
毎回アドバイスをいただけてうれしい限りです。
ありがとうございました。