# ラジオボタンの選択によって表示させるフィールドの必須入力を動的に変えたい。

**URL:** https://community.cybozu.dev/t/topic/10459
**Category:** kintone 開発相談
**Created:** [2025 年 6 月 12 日午前 1:49 UTC](https://community.cybozu.dev/t/topic/10459 "2025-06-12T01:49:54Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![EKO](https://avatars.discourse-cdn.com/v4/letter/e/a8b319/32.png) [@EKO](https://community.cybozu.dev/u/EKO)
#### Post date: [2025 年 6 月 12 日午前 1:49 UTC](https://community.cybozu.dev/t/topic/10459/1 "2025-06-12T01:49:54Z")

</div>

ラジオボタンの選択によって、表示するフィールドを切り替えつつ(グループ設定)  
選択されたラジオボタンに紐づくフィールドのみ必須入力にすることは可能でしょうか。生成AIで何回かコードを書いてもらい動作検証しているのですが、うまくいかず。  
何かご教示いただければと。よろしくお願いいたします。

```javascript
(function() {
  'use strict';
  
  // 必須解除のマッピング
  const requiredFieldMapping = {
    '不具合報告(営業所申請分)': [
      '文字列 __1行__ 2',
      '日付_1',
      '文字列 __1行__ 1',
      '数値_0',
      '数値',
      'ラジオボタン',
      '文字列 __1行__ 3',
      '日付_2',
      '数値_1'
    ],
    '工事提案・見積書提出(●●●不動産申請分)': [
      '文字列 __1行__ 3',
      '日付_2',
      '数値_1'
    ]
  };
  
  // 表示時とラジオボタン変更時
  const events = [
    'app.record.create.show',
    'app.record.edit.show',
    'app.record.create.change.ラジオボタン_0',
    'app.record.edit.change.ラジオボタン_0'
  ];
  
  kintone.events.on(events, function(event) {
    const selectedOption = event.record['ラジオボタン_0'].value;
    
    // 選択されたオプションに対応するフィールドを必須解除
    if (selectedOption && requiredFieldMapping[selectedOption]) {
      const fieldsToUnrequire = requiredFieldMapping[selectedOption];
      
      fieldsToUnrequire.forEach(function(fieldCode) {
        if (event.record[fieldCode]) {
          event.record[fieldCode].required = false;
        }
      });
    }
    
    return event;
  });
  
  // 保存時のバリデーション処理
  const submitEvents = [
    'app.record.create.submit',
    'app.record.edit.submit'
  ];
  
  kintone.events.on(submitEvents, function(event) {
    const selectedOption = event.record['ラジオボタン_0'].value;
    
    // 選択されたオプションに対応するフィールドのエラーをクリア
    if (selectedOption && requiredFieldMapping[selectedOption]) {
      const fieldsToUnrequire = requiredFieldMapping[selectedOption];
      
      fieldsToUnrequire.forEach(function(fieldCode) {
        if (event.record[fieldCode] && event.record[fieldCode].error) {
          event.record[fieldCode].error = null;
        }
      });
    }
    
    return event;
  });
  
  // バリデーション処理
  const validateEvents = [
    'app.record.create.validate',
    'app.record.edit.validate'
  ];
  
  kintone.events.on(validateEvents, function(event) {
    const selectedOption = event.record['ラジオボタン_0'].value;
    
    // 選択されたオプションに対応するフィールドのバリデーションエラーを削除
    if (selectedOption && requiredFieldMapping[selectedOption] && event.errors) {
      const fieldsToUnrequire = requiredFieldMapping[selectedOption];
      
      // エラー配列をフィルタリングしてエラーを削除
      for (let i = event.errors.length - 1; i >= 0; i--) {
        const error = event.errors[i];
        
        // フィールドコードを抽出する処理
        const fieldId = error.elementId || '';
        let fieldCode = fieldId.replace(/^.*?field-/, '').replace(/-.*$/, '');
        
        // 数値_0のようなフィールドコードに対応
        if (fieldCode.match(/^[^-]+-[^-]+$/)) {
          fieldCode = fieldCode.replace(/-/, '_');
        }
        
        // 必須解除対象のフィールドのエラーを削除
        if (fieldsToUnrequire.includes(fieldCode)) {
          event.errors.splice(i, 1);
        }
      }
    }
    
    return event;
  });
})();

```

---

<div class="post-metadata">

### Author: ![EKO](https://avatars.discourse-cdn.com/v4/letter/e/a8b319/32.png) [@EKO](https://community.cybozu.dev/u/EKO)
#### Post date: [2025 年 6 月 12 日午前 4:12 UTC](https://community.cybozu.dev/t/topic/10459/3 "2025-06-12T04:12:04Z")

</div>

ご回答いただきありがとうございます。  
生成AIに頼り切っておりました。自身でも  
把握いたします。ありがとうございます!!

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)
#### Post date: [2025 年 6 月 15 日午前 4:12 UTC](https://community.cybozu.dev/t/topic/10459/4 "2025-06-15T04:12:06Z")

</div>

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