按另一个列表框的值过滤javascript中一个列表框的值

时间:2018-12-25 09:08:30

标签: javascript drop-down-menu listbox

在通过选择 selectbox0 中的值来过滤 selectbox1 中显示的内容时,我试图保留 selectbox1 的值(URL)。正在针对 selectbox2 进行过滤。

我遇到的问题是,不是保留URL(值),而是在过滤后仅将内部文本保留在 selectbox1 中。

我想解决的另一件事是,如果可能的话,我想对用户隐藏 selectbox2

<html>
<head>
    <title>Links</title>
    <select id="selectbox0" name="" ;>
        <option value="" selected>All</option>
        <option value="Google">Google</option>
        <option value="Microsoft">Microsoft</option>
        <option value="Apple">Apple</option>
    </select>
    <select id="selectbox1" name="" ;>
        <option value="https://www.google.com" selected>Google</option>
        <option value="https://www.microsoft.com">Microsoft</option>
        <option value="https://www.apple.com">Apple</option>
    </select>
        <select id="selectbox2" name="" ;>
        <option value="https://www.google.com" selected>Google</option>
        <option value="https://www.microsoft.com">Microsoft</option>
        <option value="https://www.apple.com">Apple</option>
    </select>
    <button onclick="openInTabSelect();">Open</button>
    <script type="text/javascript">
        function openInTabSelect() {
            var pSelect = document.getElementById('selectbox1').value;
            //console.log(pSelect)
            var newTab = safari.self.browserWindow.openTab();
            newTab.url = pSelect;
        }

        var selectbox0 = document.getElementById('selectbox0'),
        selectbox1 = document.getElementById('selectbox1'),
        selectbox2 = document.getElementById('selectbox2');

        selectbox0.addEventListener('change', function() {
            selectbox1.innerHTML = '';
            for (var childIndex = 0; childIndex < selectbox2.children.length; childIndex++) {
                var child = selectbox2.children[childIndex];
                if (child.innerHTML.search(selectbox0.value) != -1) {
                    option = document.createElement('option');
                    option.innerHTML = child.innerHTML;
                    selectbox1.appendChild(option);
                }
            }
        });

    </script>
</head>
</html>

预期:在 selectbox0 中选择 Google 应该会过滤掉,并且在 selectbox1 中仅显示 Google ,并保留其值 www.google.com ,它将通过单击按钮打开在新标签中打开。

Exp。元素:< option value="https://www.google.com" selected="">Google< /option >

实际:在 selectbox0 中选择 Google 会过滤掉并仅在 selectbox1 中显示 Google ,但不会保留其值 www.google.com

行动。元素:< option >Google< /option >

3 个答案:

答案 0 :(得分:1)

我相信我找到了您的问题。您正在使用innerHTML获取值,但需要该值。 innerHTML在您的选项字段中获取文本,而不是值。试试这个:

if (child.search(selectbox1.value) != -1) {
   option = document.createElement('option');
   option.innerHTML = child.innerHTML;
   selectbox1.appendChild(option);
   }

答案 1 :(得分:0)

您的.getElementById()语句指向一个不存在的ID selectbox

var pSelect = document.getElementById('selectbox').value;

我不太确定您要指向哪个ID,但是请尝试先清除此ID。

答案 2 :(得分:0)

感谢所有人阅读本文,但我自己弄清楚了。抱歉,我提早提出了这个问题。通过在我首先定义option值的位置添加第二行,它起作用了。

            option.value = child.value;
            option.innerHTML = child.innerHTML;