【问题标题】:Select box enabled through Javascript Function通过 Javascript 函数启用的选择框
【发布时间】:2014-12-11 15:11:09
【问题描述】:

我正在尝试在另一个选择框中选择一个选项时启用一个选择框。在这种情况下,当用户在第一个选择框中选择 R 或 C 时,应该启用第二个框。我试图在这里复制解决方案:Selectbox disabled or enabled by an option of an other selectbox,但是我使用的表单设置为提交和休息按钮,以及许多其他输入和选择字段。我对 Javascript 和 HTML 也很陌生,所以如果我做了一些愚蠢的事情,我不会完全感到惊讶。

我的Javascript函数如下,放在HTML正文代码之后:

<script type="text/javascript">
    document.getElementById("part").onchange = function () 
    {       
        if (document.getElementById("part").value == "R" || document.getElementById("part").value == "C") 
        {
            document.getElementByID('part_number').disabled = false;
        }
        else 
        {
            document.getElementByID('part_number').disabled = true;
        }
    }
</script>

选择框是:

<select class="form-control" name="part[]" id="part" style="display: inline-block; width: 50%;" data-index="1">
    <option value disabled selected> -- Select a part -- </option>
    <option value='R'>R</option>
    <option value='C'>C</option>
</select>
<select multiple class="form-control" name="part_number[]" id="part_number" style="display: inline-block; width: 50%;" disabled>
    <option value disabled selected> -- Select a part -- </option>
    <?php for ($i = 1; $i < 100; $i++){?>
    <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
    <?php } ?>
</select>

第二个框包含选项 1-99,默认情况下禁用。这两个文本框可以通过动态 Javascript 函数多次复制,这就是我使用数组的原因。我的浏览器控制台也没有错误。我正在使用最新版本的谷歌浏览器。任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    您的代码的唯一问题是您在if else 指令中使用getElementByID(大写D)而不是getElementById

    应该是:

    if (selectedPart === "R" || selectedPart  === "C") 
    {
        document.getElementById('part_number').disabled = false;
    } else {   
        document.getElementById('part_number').disabled = true;
    }
    

    【讨论】:

    • 难以置信...哈哈。谢谢你。请参阅我对其他答案的评论。
    • 发生在最好的情况下。我把 Paddy 的话当作我自己的话......不确定你对这个新请求的意思......你能改写一下吗?
    • 哈哈 Notepad++ 的典型编码问题,尽管它很出色。好的,所以当在任一选择框中选择一个选项(它们在同一个 div 内)时,包含这两个选项的 div 将复制到原始 div 下方。这可以无限持续。当第一个选择框选项被选中时,第二个被启用,这两个被复制,但随后被复制的第二个框被启用。这不应该发生。我希望这更有意义。
    • 好吧......我们需要更多代码来尝试回答这个问题(我猜这将是一个与 PHP 相关的问题)。您没有提供有关应用于包装器元素(甚至包装器本身)的指令的任何代码。如果发生了您所描述的情况,则与提供的 sn-ps 无关。
    • 问题是我正在使用复制 div 中的所有内容(包装器?)的代码是为此目的而提供给我的,我不确定我是否可以分享它。包含选择的包装器只是 Javascript 函数的特定类类型。我假设可以使用随每次复制而变化的数据索引(在第一个选择框中)来解决问题。那里的 PHP 逻辑就足够了。我可以尝试玩这个。谢谢@henser。
    【解决方案2】:

    您没有正确获取下拉列表的选定值:

    <script type="text/javascript">
        document.getElementById("part").onchange = function () 
        {       
            var partList = document.getElementById("part");
            var selectedPart = partList.options[partList.selectedIndex].value;
    
            if (selectedPart === "R" || selectedPart  === "C") 
            {
                document.getElementById('part_number').disabled = false;
            }
            else 
            {
                document.getElementById('part_number').disabled = true;
            }
        }
    </script>
    

    【讨论】:

    • 谢谢。但是,对于另一个答案,此方法有效,一旦为一个框选择了一个值,就会启用其他所有框。有没有办法让两个选择框成对?
    • @GabrielEisenberg - 不知道你说实话是什么意思。刚刚更正了代码中的问题 - 如果逻辑不正确,您可能需要改写问题。还更新以包含 henser 的答案,以修复内部 getElementById。
    • 最后一个措辞很糟糕,这就是我删除它并添加这个的原因。很抱歉。
    • 你有多个相同ID的盒子吗?
    • 当他们被复制时,我认为他们会。这样就可以解释了。另一个答案的 cmets 中有更详细的解释。
    猜你喜欢
    • 1970-01-01
    • 2011-10-09
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 2019-10-13
    • 1970-01-01
    相关资源
    最近更新 更多