【问题标题】:How can I schedule enable/disable an element in html using javascript?如何使用 javascript 安排启用/禁用 html 中的元素?
【发布时间】:2019-06-23 10:53:41
【问题描述】:

考虑页面上标有按钮 A、按钮 B、按钮 C 和按钮 D 的 4 个按钮。 通过单击每个按钮,用户重定向到另一个页面。但是,我希望每个按钮在预定义的日期和时间处于活动状态,并且该按钮的悬停颜色在激活时为绿色。例如,按钮 A 在 2019 年 6 月 23 日下午 2:00 至下午 4:00 激活。它的颜色是绿色,其他按钮的颜色是红色,并且它们被禁用。在下一个预定义时间,按钮 B 为绿色并被激活,依此类推。 是否可以使用Javascript?

更新: 请帮我看看下面的代码是如何与这个拓扑一起工作的:

HTML:
<div id="wrap">
  <header>
    <h1>How this code works?</h1>
    <div id="nav">
      <ul>
        <li><a class="active" href="#home">ITEM1</a></li>
        <li><a href="#about">ITEM2</a></li>
        <li><a href="#contact">ITEM3</a></li>
      </ul>
    </div>
  </header>
  <section>
  </section>  
  <footer></footer>
</div>

CSS: * { 框尺寸:边框框; } 身体{颜色:#222;填充:1em 2em;背景:#eee; font:13px/1.4 'open sans', sans-serif; } h1, h2 { 边距:0 0 .5em;行高:1.2; font-family:'open sans condensed', sans-serif; } h1 { 颜色:#f90;文本转换:大写; } p { 边距:1em 0; } 一个{颜色:#06c; -webkit-transition:.2s 线性;过渡:.2s 线性; } a:hover { 颜色:#07c; } 页脚 { 颜色:#888;明确:两者;字体大小:12px;边距:2em 0 0;文本对齐:居中; } 页脚一个 { 颜色:#444; } #wrap { 边距:1em 自动;填充:1.5em;背景:#fff;盒子阴影:0 5px 5px 0 rgba(0,0,0,.2); }

#nav { background:#333; }
  #nav ul { padding:0; overflow:hidden; list-style:none; }
  #nav li { float:left; }
  #nav a { color:#fff; display:block; padding:.5em 2em; }
    #nav a:hover { background:#666; }
    #nav a.active { color:#222; background:#f90; }
      #nav a.active:hover {}
      #nav.over a.active { color:#fff; background:none; }
        #nav.over a.active:hover { background:#666; }

JavaScript:

let timeToActivate = (new Date("June 23, 2019 14:00:00")).getTime();
let timeToDeActivate = (new Date("June 24, 2019 16:00:00")).getTime();
let currTime = Date.now();
var NewClass = document.querySelector("#nav a");

if(currTime > timeToActivate && currTime < timeToDeActivate){
    // Write Code To Activate Button
    NewClass.setAttribute("class","active");
}else if(currTime < timeToActivate){
NewClass.setAttribute("class","active");


    setTimeout(() => {

         // write code to activate button

         // To Deactivate button on 4pm
         setTimeout(() => {

              // write code to deactivate button

         }, timeToDeActivate - Date.now())

    }, timeToActivate - currDate);
}

更新 2:使用 jquery 的解决方案 这是工作解决方案。我刚刚更新了帖子,以防其他人有同样的目的:

<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"></script>
<script>   
 btna = [
    {
      "id":"#btn123",
      "formId" : "#wpcf7-f4849-p4850-o1",
      'openTime' : "June 23, 2019 14:00:00",
      'closeTime' : "June 23, 2019 14:00:00",
    },
    {
      "id":"#btn1234",
      "formId" : "#wpcf7-f4940-p4850-o2",
      'openTime' : "June 23, 2019 14:00:00",
      'closeTime' : "June 25, 2019 14:00:00",
    },
    {
      "id":"#btn12345",
      "formId" : "#wpcf7-f4941-p4850-o3",
      'openTime' : "June 23, 2019 14:00:00",
      'closeTime' : "June 28, 2019 14:00:00",
    }
  ]
  $(document).ready(function(){
    let openTime
    let closeTime
    let button
    let itemForm
    let now = Date.now();
    btna.map(function(item){
      openTime = (new Date(item.openTime)).getTime()
            closeTime = (new Date(item.closeTime)).getTime()
      button = $( item.id )
      itemForm = $( item.formId )
      if (closeTime > now && openTime < now ) {
        // Button in correct time period
        button.addClass("active")
        // if you don't want to auto hide form in page startup just comment out this line 
        itemForm.hide()
        button.click(function(){
           $( item.formId ).toggle(250)
        })
      }else{
        // Button is'nt in its time period
        button.addClass("ex1")
        itemForm.hide()
      }
    })
  })</script>

【问题讨论】:

  • 可以使用setTimeout函数
  • 是的,正如@HienNguyen 建议的那样,您可以使用 setTimeout(() => { //activate code here }, (new Date("Date/Time You To Activate it")) - Date.now( ))
  • 我认为你应该每秒或每 5-10 秒运行一次代码,因为时间每秒都在变化,你的代码只在页面刷新时运行。

标签: javascript html wordpress forms disabled-input


【解决方案1】:

然后默认禁用按钮,

let timeToActivate = (new Date("June 23, 2019 14:00:00")).getTime();
let timeToDeActivate = (new Date("June 23, 2019 16:00:00")).getTime();
let currTime = Date.now();

if(currTime > timeToActivate && currTime < timeToDeActivate){
    // Write Code To Activate Button
}else if(currTime < timeToActivate){

    // To Activate on 2pm
    setTimeout(() => {

         // write code to activate button

         // To Deactivate button on 4pm
         setTimeout(() => {

              // write code to deactivate button

         }, timeToDeActivate - Date.now())

    }, timeToActivate - currTime);
}

根据您更新的问题,我创建了一个小提琴,检查它的工作原理

https://jsfiddle.net/Abhay_Sehgal20/cy2jqmpu/5/

【讨论】:

  • 感谢您的回复。我试图应用您建议的解决方案。但是,我无法修复它。你能告诉我问题是什么吗?谢谢
  • @Majid,我从上面的链接创建了一个小提琴检查
  • 通过传递 timeToActivate 小于当前时间来测试它会显示绿色按钮,然后通过传递 timeToActivate 比当前时间大 x 秒来测试它,你会看到蓝色按钮在 x 秒后会更改为绿色同样你可以测试 timeToDeactivate 也
  • 如果这对您有用,请点赞并接受答案!
  • 感谢您的回复。还有一个问题,我有几个 btn 元素,我将它们命名为 btn1,btn2 ,...,我必须为每个元素重复它,这会导致有许多 javascript 标签,你知道我如何将它们放在一个标签可能在“for”循环中?挑战是每个 btn 应该在不同的日期和时间处于活动状态!
猜你喜欢
  • 2015-01-24
  • 2019-06-05
  • 2016-07-03
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多