条件によって編集不可に設定する

ドロップダウン選択内容によって編集不可にしたい項目が
10項目以上ある場合のプログラム

//Webを選択時編集不可にする。'要件’はドロップダウンのフィールドコード
if (record[‘要件’][‘value’] === ‘Web’){
record[‘signage’].disabled = true;
record[‘宿泊有無’].disabled = true;
record[‘交通手段’].disabled = true;
record[‘本社車’].disabled = true;
record[‘返却日時’].disabled = true;
record[‘返却場所’].disabled = true;
record[‘出迎え’].disabled = true;
record[‘昼食’].disabled = true;
record[‘夕食’].disabled = true;
//record[‘宿泊’].disabled = true;



①泥くさく10項目以上1つずつtrueを設定する方法しかないでしょうか?
そうだとしたら、elseも同じように10項目以上falseを設定する事に
なりますか?
②10項目めの’宿泊’を追加すると、
判定するドロップダウンで’Web’を選んでも
10項目すべて編集不可にならなくなりました。
試しに10個目の’宿泊’をコメントにすると、正常に編集不可になります。
項目数に制限とかあるのでしょうか?
ちなみに、‘宿泊’を追加すると’'Web’をドロップダウンで選択する時も、
スムーズに選択されません。
(ワンクッションクリックしなおさないといけない)
③編集不可にする項目の中にテーブルがあるけれど、
テーブルのフィールドコードを設定しても
編集不可にならないけれど、テーブルの場合は
設定の仕方が変わるのでしょうか?

要件のドロップダウンで’Web’を選択すると
入力不要な項目が12項目ぐらい一気に増えるので
それを編集不可にしたいだけで、
簡単な動きなのですが、どうしてもうまくいきません。
どなたか教えてください。
それか、他にもっとシンプルなやり方があるのでしょうか?

const list = ["宿泊","交通手段","本社車"]
list.forEach(field=>record[field].disabled = true)

のような形で配列にフィールドコード格納してforEach等で回してしまうのが楽なのかなと思います。

早速の回答ありがとうございます。
なにぶん、私は素人なのでforEachと言われて「なるほど!!」
とならず、初めて見る命令文でして・・・。
ちょっと試してみます。
ありがとうございます。

「いいね!」 1

確認できました。
質問①,②が解決しました。
ありがとうございました。

テーブルも配列なのでforEachで回して各行の特定のフィールドに対してdisabledしてあげてみてください。

const record = event.record
record.テーブルフィールドコード.value.forEach(row=>{
      row.value.テーブル行のフィールドコード.disabled = true
})

そうなんですね。
やってみます!!

const record = event.recordはプログラム別行に同じ記載があるので
const record2 = event.record2
に変更しました。
(変数なのか命令なのか?変えていいのか?いけないのか?区別がついていません。)

テーブル行のフィールドコードとありますが
テーブルは9個のフィールドで出来ているのですが
すべてのコードを表記するという事でしょうか?
テーブルなので行は増えると思うのですが
そこはどのように設定すればいいでしょうか?
すみません、結局テーブルの編集不可設定できないままです。 :sob:

event.record2はevent内にrecord2というものは存在しないので使えません。
そしたら,const record = event.recordの今回追加した行は削除してください。
eventの中身は console.log(event) 等記載してコンソールで中身確認してみるといいです。

テーブルの中に例えば、
商品、日付、数量とかの文字フィールドがあったらまた配列にして、

const tableFieldNames = ["商品","日付","数量"]
record.テーブルフィールドコード.value.forEach((row,index)=>{
      tableFieldNames.forEach(tableField =>{
        row.value[tableField].disabled = true
      }
})

テーブルの中で1行ずつ設定してあげる感じいいかと思います。
また特定の行で何かしら編集可だったり、不可にしたりしたい場合は、forEach分の第2引数のindex(上記だとrow,indexと記載されている箇所)を使って何行目なのか判定して処理変えてあげるのがいいかなと思います。

※追記
テーブル行のフィールドコードは難しく考えず、テーブルに設置したフィールドのことです!

丁寧な回答ありがとうございます。
テーブル丸ごと編集不可設定にしたいので
やってみます!!

「いいね!」 1

やってみました。
教えてもらったプログラム内容が理解できていないままなので
ダメですが、テーブル行のフィールドが編集不可になりました。

(function(){
‘use strict’;

kintone.events.on([
  'app.record.create.show', //追加画面表示
  'app.record.edit.show',  //編集画面表示
  'app.record.create.change.要件', //追加画面で値を変更した時
  'app.record.edit.change.要件' //編集画面で値を変更した時      

],
function(event) {
const record = event.record;
const list = [
‘signage’,‘宿泊有無’,‘交通手段’,‘本社車’,‘返却日時’,‘返却場所’,‘出迎え’,‘昼食’,‘夕食’,‘宿泊’,‘搭乗者負担’]
const tableFieldNames = [
‘氏名’,‘年齢’,‘航空会社’,‘日時往路’,‘到着往路’,‘出発往路’,‘日時復路’,‘到着復路’,‘出発復路’]

  if (record['要件']['value'] === 'その他') {
      kintone.app.record.setFieldShown('その他詳細', true);//その他の時表示
    } 
    else 
    {
      kintone.app.record.setFieldShown('その他詳細', false); //その他の時非表示
      record['その他詳細']['value'] = ''; //その他以外の時に値をクリアする
    }

  if (record['要件']['value'] === 'Web工検')
  {
     list.forEach(field=>record[field].disabled = true)
     record.passenger.value.forEach((row,index)=>
    {
        tableFieldNames.forEach(tableField=>
          {
          row.value[tableField].disabled = true //編集不可にする
        }
    )})
    else
    {
      list.forEach(field=>record[field].disabled = false) //編集可にする
    }
    return event;
 }    

}))

(row,index)って何なのか?特にrowそしてその後の=>
テーブルのフィールドは編集不可になったのですが
結局テーブルボタンの+が押せて追加が出来てしまいます。
テーブル自体追加できずに編集不可には出来ないのでしょうか?
いっそのこと、編集不可では無くて、非表示にしてしまおうかと
思ってますが、テーブルの非表示は出来ないのでしょうか?

forEachのrowに関しては、elementと表記しても大丈夫です。
ただ今回テーブルの行処理をするうえで私が命名しているだけです。
そのあたりはforEachに関してはここらへんで基本確認してみてください。

ボタンもquerySelectorで取得してremoveしてしまうなどやり方はありますので、一度やりたいこととjavascriptでどうやって実現できるか1つずつ調べてみると理解も進むので試してみて下さい!

「いいね!」 1

了解です。
ありがとうございます。
javascriptについての知識が乏しいので
本も購入して調べながらやってみようと思います。
みなさんは、どのように勉強してるのでしょうか?
もし、おすすめの教材・本・動画あれば教えてください。
ありがとうございました。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。