【问题标题】:Set Default Value in Dropdownlist based on current date根据当前日期在下拉列表中设置默认值
【发布时间】:2017-09-08 11:45:45
【问题描述】:

如果我有这样的下拉列表:

<select id="dropdown">
    <option value="2017-01-01T00:00:00">January 2017</option>
    <option value="2017-02-01T00:00:00">February 2017</option>
    <option value="2017-03-01T00:00:00">March 2017</option>
    <option value="2017-04-01T00:00:00">April 2017</option>
    <option value="2017-05-01T00:00:00">May 2017</option>
    <option value="2017-06-01T00:00:00">June 2017</option>
    <option value="2017-07-01T00:00:00">July 2017</option>
    <option value="2017-08-01T00:00:00">August 2017</option>
    <option value="2017-09-01T00:00:00">September 2017</option>
    <option value="2017-10-01T00:00:00">October 2017</option>
    <option value="2017-11-01T00:00:00">November 2017</option>
    <option value="2017-12-01T00:00:00">December 2017</option>
    <option value="2018-01-01T00:00:00">January 2018</option>
    <option value="2018-02-01T00:00:00">February 2018</option>
    <option value="2018-03-01T00:00:00">March 2018</option>
    <option value="2018-04-01T00:00:00">April 2018</option>
    <option value="2018-05-01T00:00:00">May 2018</option>
    <option value="2018-06-01T00:00:00">June 2018</option>
    <option value="2018-07-01T00:00:00">July 2018</option>
</select>

如何通过js设置默认值等于今天的当前月份年份?

【问题讨论】:

标签: javascript html-select


【解决方案1】:

比较日期字符串和今天的日期字符串

// get current year/month as string
var d= new Date().toISOString().slice(0,7);

var opts = document.getElementById('dropdown').options;

[].forEach.call(opts, function(opt){
    // set "selected" based on year/month matching current
    opt.selected = opt.value.slice(0,7) === d;
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="dropdown">
    <option value="2017-01-01T00:00:00">January 2017</option>
    <option value="2017-02-01T00:00:00">February 2017</option>
    <option value="2017-03-01T00:00:00">March 2017</option>
    <option value="2017-04-01T00:00:00">April 2017</option>
    <option value="2017-05-01T00:00:00">May 2017</option>
    <option value="2017-06-01T00:00:00">June 2017</option>
    <option value="2017-07-01T00:00:00">July 2017</option>
    <option value="2017-08-01T00:00:00">August 2017</option>
    <option value="2017-09-01T00:00:00">September 2017</option>
    <option value="2017-10-01T00:00:00">October 2017</option>
    <option value="2017-11-01T00:00:00">November 2017</option>
    <option value="2017-12-01T00:00:00">December 2017</option>
    <option value="2018-01-01T00:00:00">January 2018</option>
    <option value="2018-02-01T00:00:00">February 2018</option>
    <option value="2018-03-01T00:00:00">March 2018</option>
    <option value="2018-04-01T00:00:00">April 2018</option>
    <option value="2018-05-01T00:00:00">May 2018</option>
    <option value="2018-06-01T00:00:00">June 2018</option>
    <option value="2018-07-01T00:00:00">July 2018</option>
</select>

【讨论】:

    【解决方案2】:

    你可以这样做。

    var d = new Date();
    var m = d.getMonth() + 1;
    var str = d.getFullYear() + "-" + (m >= 10 ? "" : "0") + m + "-01T00:00:00";
    var select = document.getElementById("dropdown"); 
    var options = select.options;
    for(var i = 0; i < options.length; i++){
        if(options[i].value == str){
            select.selectedIndex = i;
            break;
        }
    }
    <select id="dropdown">
        <option value="2017-01-01T00:00:00">January 2017</option>
        <option value="2017-02-01T00:00:00">February 2017</option>
        <option value="2017-03-01T00:00:00">March 2017</option>
        <option value="2017-04-01T00:00:00">April 2017</option>
        <option value="2017-05-01T00:00:00">May 2017</option>
        <option value="2017-06-01T00:00:00">June 2017</option>
        <option value="2017-07-01T00:00:00">July 2017</option>
        <option value="2017-08-01T00:00:00">August 2017</option>
        <option value="2017-09-01T00:00:00">September 2017</option>
        <option value="2017-10-01T00:00:00">October 2017</option>
        <option value="2017-11-01T00:00:00">November 2017</option>
        <option value="2017-12-01T00:00:00">December 2017</option>
        <option value="2018-01-01T00:00:00">January 2018</option>
        <option value="2018-02-01T00:00:00">February 2018</option>
        <option value="2018-03-01T00:00:00">March 2018</option>
        <option value="2018-04-01T00:00:00">April 2018</option>
        <option value="2018-05-01T00:00:00">May 2018</option>
        <option value="2018-06-01T00:00:00">June 2018</option>
        <option value="2018-07-01T00:00:00">July 2018</option>
    </select>

    【讨论】:

    • 我收到一个控制台错误提示 syntax error 并且光标指向 optionsArray.find(o =&gt; o.value == str) 中的 lambda
    • 你可以用optionsArray.find(function(o){return o.value == str;})替换它
    • 它仍然默认为下拉列表中的第一个值
    • 另一个控制台错误说 object doesn't support property or method 'from on Array.from
    • @BviLLe_Kid 我已将其更改为使用原生 JavaScript,它应该适用于大多数浏览器版本。
    【解决方案3】:

    创建一个日期字符串,然后将&lt;select&gt;的值设置为它:

    $(document).ready(() => {
      var d = new Date();
      var year = d.getYear();
      var month = d.getMonth();
      var thisMonth = new Date(year + 1900, month);
      $("#dropdown").val(thisMonth.toLocaleFormat("%Y-%m-01T00:00:00"));
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <select id="dropdown">
        <option value="2017-01-01T00:00:00">January 2017</option>
        <option value="2017-02-01T00:00:00">February 2017</option>
        <option value="2017-03-01T00:00:00">March 2017</option>
        <option value="2017-04-01T00:00:00">April 2017</option>
        <option value="2017-05-01T00:00:00">May 2017</option>
        <option value="2017-06-01T00:00:00">June 2017</option>
        <option value="2017-07-01T00:00:00">July 2017</option>
        <option value="2017-08-01T00:00:00">August 2017</option>
        <option value="2017-09-01T00:00:00">September 2017</option>
        <option value="2017-10-01T00:00:00">October 2017</option>
        <option value="2017-11-01T00:00:00">November 2017</option>
        <option value="2017-12-01T00:00:00">December 2017</option>
        <option value="2018-01-01T00:00:00">January 2018</option>
        <option value="2018-02-01T00:00:00">February 2018</option>
        <option value="2018-03-01T00:00:00">March 2018</option>
        <option value="2018-04-01T00:00:00">April 2018</option>
        <option value="2018-05-01T00:00:00">May 2018</option>
        <option value="2018-06-01T00:00:00">June 2018</option>
        <option value="2018-07-01T00:00:00">July 2018</option>
    </select>

    【讨论】:

    • 我没有toLocaleFormat.. 只有.toLocaleDateString & .toLocaleTimeString
    猜你喜欢
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2020-07-06
    • 2013-10-23
    • 1970-01-01
    • 2018-09-23
    相关资源
    最近更新 更多