首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在为循环中的所有选择器的所有实例选择特定选项(在任何选择器中)之后,暂时禁用该选项

在为循环中的所有选择器的所有实例选择特定选项(在任何选择器中)之后,暂时禁用该选项
EN

Stack Overflow用户
提问于 2019-07-31 14:34:07
回答 1查看 83关注 0票数 0

我有一个html模板文件,用于我的php代码,它为6个人循环了一系列字段(名字、姓氏、出生日期、...etc)。其中一个字段是“关系”选择器,选项是:“配偶”或“子女”。如果选择了“配偶”,我希望在“关系选择器”中暂时禁用所有人员的此选项。如果没有选择配偶,则可以在任何一个人的关系选择器中选择此选项。

我非常接近解决这个问题。我正在使用jquery (下面的代码),代码执行我希望它做的事情。唯一的问题是它只关注我循环中的第一个人。如果我为2-6个人选择“配偶”,它仍然允许我为他们关系中的任何其他人选择这个选项。如果它在任何选项中被选中,我希望对所有的人都禁用它。

代码语言:javascript
复制
<table>
    <!-- People -->
    <?php for ($i = 0; $i < $people_max; $i++) { ?> 
    <tr>
        <td class="title" colspan="2">
            <h2>PERSON <?= $i+1; ?></h2>
        </td>
    </tr>
            ... 
            <tr>
        <td class="name<?= $carl_msg->getFieldMessageStyle($i . '-person_relationship_id'); ?>">Relationship:</td>
        <td class="value">
            <select tabindex="" id="relationship_select" class="select" onchange="disableSpouseOptionWhenSelected()" name="prgm_person[<?= $i; ?>][person_relationship_id]" style="width: 110px;">
                <option value=""></option>
                <?php foreach ($selects['people'] as $person) { ?>
                    <option id="option" value="<?= $person['person_relationship_id']; ?>" <?php if ($person['person_relationship_id'] == $html['prgm_person'][$i]['person_relationship_id']) { ?>selected<?php } ?>><?= $person['person_relationship_name']; ?></option>
                <?php } ?>
            </select>
        </td>
    </tr>
            ...
            <?php } ?>

    <tr>
        <td class="value">
            <br />

            <!-- Enable the top update buttons -->
            <script language="JavaScript">
                $(document).ready(function() {
                    disableSpouseOptionWhenSelected();
                });


                function disableSpouseOptionWhenSelected() { 
                    $('select:first').on('change', function () {
                        $('option[value=1]').prop('disabled', this.value === '1');
                    });
                }
            </script>

        </td>
        <td></td>
    </tr>

……

我没有把所有的代码都包括在文件里,只有相关的部分。

期望:如果relationship_select中的“配偶”选项是为第一个人选择的,则暂时禁用所有用户的relationship_selects选项。然而,如果在2-6个人中选择了“配偶”选项,它仍然允许您为任何其他人选择这一选项。

实际:如果relationship_select中的“配偶”选项是为任何人选择的,则在所有relationship_select选择器(每个人)中暂时禁用此选项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-31 15:10:16

让我试着帮你。首先,正如注释中提到的,您必须从循环中删除onchange处理程序,并且必须使select id惟一。(使用$i变量)。然后,在创建了selects之后,您必须使用事件-委托api处理它们的更改。

关于变更处理程序的几句话。如果我正确地理解了你的要求,你必须禁用所有非优先选择的“配偶”选项。因此,处理程序正在检查select是否是第一个,以及它是否正在根据第一个select值设置prop('disabled')。如果我误解了你的要求,请随时纠正我。

代码语言:javascript
复制
   $(document).on('change', '.select', function() {
  const selects = $('.select');
  const doesAnyoneIsSpouse = selects.filter(function(key) {
return $(selects[key]).val() === '1';
  }).length > 0;

  $('.select').not(this).find('option[value="1"]').prop('disabled', doesAnyoneIsSpouse);
});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select tabindex="" id="relationship_select" class="select" name="prgm_person[0][person_relationship_id]" style="width: 110px;">
   <option value=""></option>
   <option value='0'>Child</option>
   <option value='1'>Spouse</option>
 </select>

 <select tabindex="" id="relationship_select" class="select" name="prgm_person[1][person_relationship_id]" style="width: 110px;">
   <option value=""></option>
   <option value='0'>Child</option>
   <option value='1'>Spouse</option>
 </select>

 <select tabindex="" id="relationship_select" class="select" name="prgm_person[2][person_relationship_id]" style="width: 110px;">
   <option value=""></option>
   <option value='0'>Child</option>
   <option value='1'>Spouse</option>
 </select>

 <select tabindex="" id="relationship_select" class="select" name="prgm_person[3][person_relationship_id]" style="width: 110px;">
   <option value=""></option>
   <option value='0'>Child</option>
   <option value='1'>Spouse</option>
 </select>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57293247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档