【问题标题】:HTML Select, Javascript dynamic loadHTML 选择,Javascript 动态加载
【发布时间】:2015-02-20 16:34:48
【问题描述】:

我有以下几点:

 <div class="form-group">
                    <select required name="select_search">
                        <option value="Titel">Titel</option>
                        <option value="Autor">Autor</option>
                        <option value="Datum">Datum</option>
                    </select>
                </div>
                <div class="form-group">
                    <input type="text" class="form-control" id="search_query" placeholder="Suchbegriff eingeben"
                           name="search_query"/>
                </div>

但我想要的是以下内容: The inputfield shouldn't be always there, I'm looking for a solution to dynamically load the "item" under the select, when one of the first two options is chosen, the textbox should appear, when you choose the 3rd条目,然后应该会出现一个日历(Datum 表示日期,因此您应该能够在日历中选择一个日期)。也许我还得随身携带,选择框中没有预先选择任何东西,否则有点奇怪,当有选择的东西但似乎没有任何东西进入时。

【问题讨论】:

    标签: javascript twitter-bootstrap dynamic-loading


    【解决方案1】:

    HTML 代码:

    <div class="form-group">
                    <select name="select_search" onchange="selectedValue(this)">
                        <option value="" >Select Option</option>
                        <option value="1">Titel</option>
                        <option value="2">Autor</option>
                        <option value="3">Datum</option>
                    </select>
                </div>
                <div class="form-group">
                    <input type="text" class="form-control" id="search_query" style="display:none;" placeholder="Suchbegriff eingeben"
                           name="search_query"/>
                </div>
    

    JavaScript 代码:

    var element = document.getElementById('search_query');
    function selectedValue(_this) {
    element.style.display = '';
    switch (_this.value) {
        case '1':
            element.type = 'text';
            break;
        case '2':
            element.type = 'text';
            break;
        case '3':
            element.type = 'date';
            break;
        default:
            element.style.display = 'none';
      }
    }
    

    希望对你有帮助:)

    【讨论】:

    • 如果 case 是 1,它会落入 case 2,因为你没有包括一个 break;
    • 这可能是故意的,但通常是不好的做法
    • 如果我们对两种情况都有相同的代码。不需要写break。对于 1 和 2,将执行相同的代码。好的,谢谢你的建议。
    【解决方案2】:

    你想要这样的东西

    var select = document.getElementsByTagName('select')[0];
    var input = document.getElementsByTagName('input')[0];
    
    select.addEventListener('change', function () {
        var value = select.value;
    
        if (value === 'Titel' || value === 'Autor') {
            input.style.display = 'block';
        } else {
            input.style.display = 'none';
    
            // do datepicker stuff
        }
    });
    

    fiddle -

    【讨论】:

    • 首先谢谢你。有趣的是,现在,当我将代码复制到小提琴中时(jsfiddle.net/7osmfwhy),它的工作方式应该是正常的,但是当我在我的网站上尝试它时,它就不起作用了(没有出现输入字段)。 . 知道为什么吗?
    • 您可能希望为元素提供更明确的标识符 - 为输入和选择分别提供一个 id,然后使用 document.getElementById(id); 选择它们;
    • 现在甚至不再使用小提琴了... (jsfiddle.net/nyd1toy6/4) 顺便问下另一个问题:你写了“//do datepicker stuff”,我怎么能在 javascript 中做到这一点?那么我怎样才能把我的html代码放在js的else-case中呢?
    • jsfiddle.net/nyd1toy6/5 - 已修复 :) getElementById 返回单个元素,因此您无需使用 [0] 选择第一个元素。还有一个错字 - getElementsById 未定义
    • 关于日期选择器,我建议使用日期选择器插件,Keith Wood's 相当不错 - keith-wood.name/datepick.HTML。您可以使用相同的输入,并在 else 情况下初始化日期选择器,或者您可以添加一个新输入作为触发器并默认隐藏它,以与现有输入相同的方式显示
    猜你喜欢
    • 1970-01-01
    • 2018-02-28
    • 2012-01-11
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多